コード例 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PairingRecordProvisioner"/> class.
 /// </summary>
 /// <param name="muxerClient">
 /// A <see cref="MuxerClient"/> which represents the connection to the muxer.
 /// </param>
 /// <param name="kubernetesPairingRecordStore">
 /// A <see cref="PairingRecordStore"/> which provides access to the pairing records stored in the cluster.
 /// </param>
 /// <param name="serviceProvider">
 /// A <see cref="ServiceProvider"/> which can be used to acquire services.
 /// </param>
 /// <param name="logger">
 /// A logger which can be used when logging.
 /// </param>
 public PairingRecordProvisioner(MuxerClient muxerClient, KubernetesPairingRecordStore kubernetesPairingRecordStore, DeviceServiceProvider serviceProvider, ILogger <PairingRecordProvisioner> logger)
 {
     this.muxerClient = muxerClient ?? throw new ArgumentNullException(nameof(muxerClient));
     this.kubernetesPairingRecordStore = kubernetesPairingRecordStore ?? throw new ArgumentNullException(nameof(kubernetesPairingRecordStore));
     this.serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
     this.logger          = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #2
0
        public async Task ReadAsync_Works_Async()
        {
            var key = Convert.FromBase64String(
                "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JR0pBb0dCQUorNXVIQjJycllw" +
                "VEt4SWNGUnJxR1ZqTHRNQ2wyWHhmTVhJeEhYTURrM01jV2hxK2RtWkcvWW0KeDJuTGZq" +
                "WWJPeUduQ1BxQktxcUU5Q2tyQy9DUi9mTlgwNjJqMU1pUHJYY2RnQ0tiNzB2bmVlMFNF" +
                "T2FmNVhEQworZWFZeGdjWTYvbjBXODNrSklXMGF0czhMWmUwTW9XNXpXSTh6cnM4eDIw" +
                "UFFJK1RGU1p4QWdNQkFBRT0KLS0tLS1FTkQgUlNBIFBVQkxJQyBLRVktLS0tLQo=");

            var pairingRecord = new PairingRecordGenerator().Generate(key, "abc");
            var secret        = pairingRecord.AsSecret();

            var client       = new Mock <KubernetesClient>(MockBehavior.Strict);
            var secretClient = new Mock <NamespacedKubernetesClient <V1Secret> >(MockBehavior.Strict);

            client.Setup(c => c.GetClient <V1Secret>()).Returns(secretClient.Object);

            secretClient
            .Setup(c => c.TryReadAsync("abc", default))
            .Returns(Task.FromResult(secret))
            .Verifiable();

            var store = new KubernetesPairingRecordStore(client.Object, NullLogger <KubernetesPairingRecordStore> .Instance);

            var value = await store.ReadAsync("abc", default);

            // Basic assertions
            Assert.NotNull(value.DeviceCertificate);
            Assert.NotNull(value.HostCertificate);
            Assert.NotNull(value.RootCertificate);

            secretClient.Verify();
        }
コード例 #3
0
        public async Task PairingRecord_Lifecycle_Async()
        {
            var key = Convert.FromBase64String(
                "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JR0pBb0dCQUorNXVIQjJycllw" +
                "VEt4SWNGUnJxR1ZqTHRNQ2wyWHhmTVhJeEhYTURrM01jV2hxK2RtWkcvWW0KeDJuTGZq" +
                "WWJPeUduQ1BxQktxcUU5Q2tyQy9DUi9mTlgwNjJqMU1pUHJYY2RnQ0tiNzB2bmVlMFNF" +
                "T2FmNVhEQworZWFZeGdjWTYvbjBXODNrSklXMGF0czhMWmUwTW9XNXpXSTh6cnM4eDIw" +
                "UFFJK1RGU1p4QWdNQkFBRT0KLS0tLS1FTkQgUlNBIFBVQkxJQyBLRVktLS0tLQo=");

            var udid = "pairingrecord-lifecycle";
            var buid = Guid.NewGuid().ToString();

            var record = new PairingRecordGenerator().Generate(key, buid);

            using (var client = this.CreateKubernetesClient())
            {
                var store = new KubernetesPairingRecordStore(client, this.loggerFactory.CreateLogger <KubernetesPairingRecordStore>());

                // The record should not exist.
                Assert.Null(await store.ReadAsync(udid, default).ConfigureAwait(false));

                // Write the record; it can be retrieved afterwards
                await store.WriteAsync(udid, record, default).ConfigureAwait(false);

                var record2 = await store.ReadAsync(udid, default).ConfigureAwait(false);

                Assert.NotNull(record2);
                Assert.Equal(record.ToByteArray(), record2.ToByteArray());

                // Delete the record; it can no longer be retrieved afterwardss
                await store.DeleteAsync(udid, default).ConfigureAwait(false);

                Assert.Null(await store.ReadAsync(udid, default).ConfigureAwait(false));
            }
        }
コード例 #4
0
        public async Task WriteAsync_ValidatesArguments_Async()
        {
            var store = new KubernetesPairingRecordStore(Mock.Of <KubernetesClient>(), NullLogger <KubernetesPairingRecordStore> .Instance);

            await Assert.ThrowsAsync <ArgumentNullException>(() => store.WriteAsync(null, new PairingRecord(), default)).ConfigureAwait(false);

            await Assert.ThrowsAsync <ArgumentNullException>(() => store.WriteAsync("abc", null, default)).ConfigureAwait(false);
        }
コード例 #5
0
        public async Task DeleteAsync_Works_Async()
        {
            var client       = new Mock <KubernetesClient>(MockBehavior.Strict);
            var secretClient = new Mock <NamespacedKubernetesClient <V1Secret> >(MockBehavior.Strict);

            client.Setup(c => c.GetClient <V1Secret>()).Returns(secretClient.Object);

            secretClient
            .Setup(c => c.TryDeleteAsync("abc", TimeSpan.FromMinutes(1), default))
            .Returns(Task.FromResult((V1Secret)null))
            .Verifiable();

            var store = new KubernetesPairingRecordStore(client.Object, NullLogger <KubernetesPairingRecordStore> .Instance);

            await store.DeleteAsync("abc", default);

            secretClient.Verify();
        }