diff --git a/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs b/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs index 2ed341faf..a09979ba0 100644 --- a/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs +++ b/Yubico.YubiKey/src/Yubico/YubiKey/YubiKeyDeviceInfo.cs @@ -299,6 +299,7 @@ internal YubiKeyDeviceInfo Merge(YubiKeyDeviceInfo? second) ResetBlocked = ResetBlocked | second.ResetBlocked, SerialNumber = SerialNumber ?? second.SerialNumber, IsFipsSeries = IsFipsSeries || second.IsFipsSeries, + IsSkySeries = IsSkySeries || second.IsSkySeries, FormFactor = FormFactor != FormFactor.Unknown ? FormFactor diff --git a/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs b/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs new file mode 100644 index 000000000..6e5c049f7 --- /dev/null +++ b/Yubico.YubiKey/tests/integration/Yubico/YubiKey/YubiKeyDeviceListenerTests.cs @@ -0,0 +1,58 @@ +// Copyright 2024 Yubico AB +// +// Licensed under the Apache License, Version 2.0 (the "License"). +// You may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Threading; +using Xunit; +using Yubico.PlatformInterop; +using Yubico.YubiKey.TestUtilities; + +namespace Yubico.YubiKey +{ + [Trait(TraitTypes.Category, TestCategories.Elevated)] + public class YubiKeyDeviceListenerTests + { + private IYubiKeyDevice WaitForDevice() + { + IYubiKeyDevice? device = null; + + AutoResetEvent reset = new AutoResetEvent(false); + EventHandler handler = (sender, args) => + { + device = args.Device; + reset.Set(); + }; + + YubiKeyDeviceListener.Instance.Arrived += handler; + reset.WaitOne(); + YubiKeyDeviceListener.Instance.Arrived -= handler; + + Assert.NotNull(device); + return device; + } + + [Fact] + public void KeyArrived_SkyEe_IsSkySeriesIsTrue() + { + // Needs to run elevated so the listener finds and enumerates any hidFido + // devices else no Merge will happen, and it won't be a valid test + // See https://github.com/Yubico/Yubico.NET.SDK/issues/156 + Assert.True(SdkPlatformInfo.IsElevated); + + IYubiKeyDevice device = WaitForDevice(); + + Assert.True(device.IsSkySeries); + } + } +}