public void UpdateSharedAccessKeyShouldAllowRefreshOfTheSharedAccessSignature()
        {
            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 EventHubsSharedAccessKeyCredential(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 UpdateSharedAccessKeyShouldNotChangeOtherPropertiesForTheSharedAccessSignature()
        {
            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 EventHubsSharedAccessKeyCredential(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.");
        }
        public void UpdateSharedAccessKeyShoulRefreshEventHubSharedKeyCredentialNameAndKey()
        {
            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 EventHubsSharedAccessKeyCredential(beforeKeyName, beforeKeyValue);

            keyCredential.UpdateSharedAccessKey(afterKeyName, afterKeyValue);

            var keyName = keyCredential.SharedAccessKeyName;
            var key     = keyCredential.SharedAccessKey;

            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.");
        }