Exemple #1
0
        public void UpdateSharedAccessKeyShouldAllowToRefreshASharedAccessSignature()
        {
            var resource       = "amqps://before/path";
            var beforeKeyName  = "beforeKeyName";
            var afterKeyName   = "afterKeyName";
            var beforeKeyValue = "beforeKeyValue";
            var afterKeyValue  = "afterKeyValue";
            var validSpan      = TimeSpan.FromHours(4);
            var signature      = new SharedAccessSignature(resource, beforeKeyName, beforeKeyValue, validSpan);
            var keyCredential  = new EventHubSharedKeyCredential(beforeKeyName, beforeKeyValue);

            // Needed to instantiate a SharedAccessSignatureCredential
            var sasCredential = keyCredential.AsSharedAccessSignatureCredential(resource, validSpan);

            // Updates
            keyCredential.UpdateSharedAccessKey(afterKeyName, afterKeyValue);

            Assert.That(sasCredential, Is.Not.Null, "A shared access signature credential should have been created.");

            var credentialSignature = GetSharedAccessSignature(sasCredential);

            Assert.That(credentialSignature, Is.Not.Null, "The SAS credential should contain a shared access signature.");
            Assert.That(credentialSignature.Resource, Is.EqualTo(signature.Resource), "The resource should match.");
            Assert.That(credentialSignature.SharedAccessKeyName, Is.EqualTo(afterKeyName), "The shared access key name should match.");
            Assert.That(credentialSignature.SharedAccessKey, Is.EqualTo(afterKeyValue), "The shared access key should match.");
            Assert.That(credentialSignature.SignatureExpiration, Is.EqualTo(signature.SignatureExpiration).Within(TimeSpan.FromSeconds(5)), "The expiration should match.");
        }
        public void ConstructorValidatesInitializesProperties()
        {
            var name             = "KeyName";
            var value            = "KeyValue";
            var credential       = new EventHubSharedKeyCredential(name, value);
            var initializedValue = GetSharedAccessKey(credential);

            Assert.That(initializedValue, Is.EqualTo(value), "The shared key should have been set.");
        }
Exemple #3
0
        public async Task ConnectionCanConnectToEventHubsUsingSharedKeyCredential()
        {
            await using (EventHubScope scope = await EventHubScope.CreateAsync(1))
            {
                var credential = new EventHubSharedKeyCredential(TestEnvironment.SharedAccessKeyName, TestEnvironment.SharedAccessKey);

                await using (var connection = new TestConnectionWithTransport(TestEnvironment.FullyQualifiedNamespace, scope.EventHubName, credential))
                {
                    Assert.That(() => connection.GetPropertiesAsync(), Throws.Nothing);
                }
            }
        }
Exemple #4
0
        public void ConstructorValidatesInitializesProperties()
        {
            var name       = "KeyName";
            var value      = "KeyValue";
            var credential = new EventHubSharedKeyCredential(name, value);

            var initializedValue = typeof(EventHubSharedKeyCredential)
                                   .GetProperty("SharedAccessKey", BindingFlags.Instance | BindingFlags.NonPublic)
                                   .GetValue(credential, null);

            Assert.That(credential.SharedAccessKeyName, Is.EqualTo(name), "The shared key name should have been set.");
            Assert.That(initializedValue, Is.EqualTo(value), "The shared key should have been set.");
        }
Exemple #5
0
        public void EventHubSharedKeyCredentialShouldHoldAReferenceToASharedAccessKey()
        {
            var resource      = "amqps://some.hub.com/path";
            var span          = TimeSpan.FromHours(4);
            var keyName       = "keyName";
            var keyValue      = "keyValue";
            var keyCredential = new EventHubSharedKeyCredential(keyName, keyValue);

            SharedAccessSignatureCredential sasCredential     = keyCredential.AsSharedAccessSignatureCredential(resource, span);
            SharedAccessSignatureCredential wrappedCredential = GetSharedAccessSignatureCredential(keyCredential);

            Assert.That(wrappedCredential, Is.EqualTo(sasCredential), "The credentials should be wrapped.");
        }
        public async Task ClientCanConnectToEventHubsUsingSharedKeyCredential()
        {
            await using (var scope = await EventHubScope.CreateAsync(1))
            {
                var connectionString = TestEnvironment.BuildConnectionStringForEventHub(scope.EventHubName);
                var properties       = ConnectionStringParser.Parse(connectionString);
                var credential       = new EventHubSharedKeyCredential(properties.SharedAccessKeyName, properties.SharedAccessKey);

                await using (var client = new EventHubClient(properties.Endpoint.Host, scope.EventHubName, credential))
                {
                    Assert.That(() => client.GetPropertiesAsync(), Throws.Nothing);
                }
            }
        }
Exemple #7
0
        public void CovertToSharedAccessSignatureCredentialProducesTheExpectedCredential()
        {
            var resource      = "amqps://some.hub.com/path";
            var keyName       = "sharedKey";
            var keyValue      = "keyValue";
            var validSpan     = TimeSpan.FromHours(4);
            var signature     = new SharedAccessSignature(resource, keyName, keyValue, validSpan);
            var keyCredential = new EventHubSharedKeyCredential(keyName, keyValue);
            var sasCredential = keyCredential.ConvertToSharedAccessSignatureCredential(resource, validSpan);

            Assert.That(sasCredential, Is.Not.Null, "A shared access signature credential should have been created.");
            Assert.That(sasCredential.SharedAccessSignature, Is.Not.Null, "The SAS credential should contain a shared access signature.");
            Assert.That(sasCredential.SharedAccessSignature.Resource, Is.EqualTo(signature.Resource), "The resource should match.");
            Assert.That(sasCredential.SharedAccessSignature.SharedAccessKeyName, Is.EqualTo(signature.SharedAccessKeyName), "The shared access key name should match.");
            Assert.That(sasCredential.SharedAccessSignature.SharedAccessKey, Is.EqualTo(signature.SharedAccessKey), "The shared access key should match.");
            Assert.That(sasCredential.SharedAccessSignature.SignatureExpiration, Is.EqualTo(signature.SignatureExpiration).Within(TimeSpan.FromSeconds(5)), "The expiration should match.");
        }
Exemple #8
0
        public void UpdateSharedAccessKeyShouldNotChangeOtherPropertiesOfASharedAccessSignature()
        {
            var resource       = "amqps://before/path";
            var validSpan      = TimeSpan.FromHours(4);
            var beforeKeyName  = "beforeKeyName";
            var afterKeyName   = "afterKeyName";
            var beforeKeyValue = "beforeKeyValue";
            var afterKeyValue  = "afterKeyValue";
            var keyCredential  = new EventHubSharedKeyCredential(beforeKeyName, beforeKeyValue);

            // Needed to instantiate a SharedAccessTokenCredential
            var sasCredential       = keyCredential.AsSharedAccessSignatureCredential(resource, validSpan);
            var credentialSignature = GetSharedAccessSignature(sasCredential);

            var signatureExpiration = credentialSignature.SignatureExpiration;

            keyCredential.UpdateSharedAccessKey(afterKeyName, afterKeyValue);

            Assert.That(credentialSignature.SignatureExpiration, Is.EqualTo(signatureExpiration), "The expiration of a signature should not change when the credentials are rolled.");
            Assert.That(credentialSignature.Resource, Is.EqualTo(resource), "The resource of a signature should not change when the credentials are rolled.");
        }
Exemple #9
0
        public void AsSharedAccessSignatureCredentialShouldRefreshTokenValidity()
        {
            var beforeResource    = "amqps://before/path";
            var afterResource     = "amqps://after/path";
            var beforeSpan        = TimeSpan.FromHours(4);
            var afterSpan         = TimeSpan.FromHours(8);
            var keyName           = "keyName";
            var keyValue          = "keyValue";
            var expectedSignature = new SharedAccessSignature(beforeResource, keyName, keyValue, beforeSpan);
            var keyCredential     = new EventHubSharedKeyCredential(keyName, keyValue);

            SharedAccessSignatureCredential sasCredential   = keyCredential.AsSharedAccessSignatureCredential(beforeResource, beforeSpan);
            SharedAccessSignature           beforeSignature = GetSharedAccessSignature(sasCredential);

            Assert.That(beforeSignature.SignatureExpiration, Is.EqualTo(expectedSignature.SignatureExpiration).Within(TimeSpan.FromSeconds(5)), "The expiration should match.");

            expectedSignature = new SharedAccessSignature(afterResource, keyName, keyValue, afterSpan);
            sasCredential     = keyCredential.AsSharedAccessSignatureCredential(afterResource, afterSpan);
            SharedAccessSignature afterSignature = GetSharedAccessSignature(sasCredential);

            Assert.That(afterSignature.SignatureExpiration, Is.EqualTo(expectedSignature.SignatureExpiration).Within(TimeSpan.FromSeconds(5)), "The expiration should match.");
        }
Exemple #10
0
        public void UpdateSharedAccessKeyShouldAlwaysRefreshEventHubSharedKeyCredentialNameAndKey()
        {
            var resource       = "amqps://before/path";
            var validSpan      = TimeSpan.FromHours(4);
            var beforeKeyName  = "beforeKeyName";
            var afterKeyName   = "afterKeyName";
            var beforeKeyValue = "beforeKeyValue";
            var afterKeyValue  = "afterKeyValue";
            var keyCredential  = new EventHubSharedKeyCredential(beforeKeyName, beforeKeyValue);

            keyCredential.UpdateSharedAccessKey(afterKeyName, afterKeyValue);

            string keyName = GetSharedAccessKeyName(keyCredential);
            string key     = GetSharedAccessKey(keyCredential);

            // Needed to instantiate a SharedAccessSignatureCredential
            var sasCredential       = keyCredential.AsSharedAccessSignatureCredential(resource, validSpan);
            var credentialSignature = GetSharedAccessSignature(sasCredential);

            Assert.That(credentialSignature.SharedAccessKeyName, Is.EqualTo(afterKeyName), "The shared access key name should change after being updated.");
            Assert.That(credentialSignature.SharedAccessKey, Is.EqualTo(afterKeyValue), "The shared access key value should change after being updated.");
            Assert.That(keyName, Is.EqualTo(afterKeyName), "The shared access key name should change after being updated.");
            Assert.That(key, Is.EqualTo(afterKeyValue), "The shared access key value should change after being updated.");
        }
 /// <summary>
 ///   Retrieves the shared access key from the credential using its private accessor.
 /// </summary>
 ///
 /// <param name="instance">The instance to retrieve the key from.</param>
 ///
 /// <returns>The shared access key.</returns>
 ///
 private static string GetSharedAccessKey(EventHubSharedKeyCredential instance) =>
 (string)
 typeof(EventHubSharedKeyCredential)
 .GetProperty("SharedAccessKey", BindingFlags.Instance | BindingFlags.NonPublic)
 .GetValue(instance, null);
Exemple #12
0
 /// <summary>
 ///   Retrieves the EventHubSharedKeyCredential from the credential using its private accessor.
 /// </summary>
 ///
 /// <param name="instance">The instance to retrieve the key from.</param>
 ///
 /// <returns>The shared access key.</returns>
 ///
 private static SharedAccessSignatureCredential GetSharedAccessSignatureCredential(EventHubSharedKeyCredential instance) =>
 (SharedAccessSignatureCredential)
 typeof(EventHubSharedKeyCredential)
 .GetProperty("SharedAccessSignatureCredential", BindingFlags.Instance | BindingFlags.NonPublic)
 .GetValue(instance, null);