using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using AWSSDK_DotNet.IntegrationTests.Utils; using Amazon.IdentityManagement; using Amazon.IdentityManagement.Model; namespace AWSSDK_DotNet.IntegrationTests.Tests.IAM { /// /// Summary description for AccessKeyTests /// [TestClass] public class AccessKeyTests : TestBase { public AccessKeyTests() { } private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [ClassCleanup] public static void Cleanup() { BaseClean(); } [TestInitialize] public void TestSetup() { IAMUtil.DeleteUsersAndGroupsInTestNameSpace(Client); } [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] public void TestCreateAccessKey() { string username = IAMUtil.CreateTestUser(Client); string keyId = null; try { CreateAccessKeyResponse response = Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); keyId = response.AccessKey.AccessKeyId; Assert.IsTrue(response.AccessKey.CreateDate.Date.CompareTo(DateTime.Now.Date) == 0); } finally { if (keyId != null) Client.DeleteAccessKey(new DeleteAccessKeyRequest() { UserName = username,AccessKeyId = keyId }); IAMUtil.DeleteTestUsers(Client, username); } } [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] [ExpectedException(typeof(NoSuchEntityException))] public void TestCreateAccessKeyNonExistentUserException() { string username = "sdk-testuser-" + DateTime.Now.Ticks; Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); } [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] public void TestListAccessKeys() { string username = IAMUtil.CreateTestUser(Client); string[] keyIds = new string[2]; try { for (int i = 0; i < 2; i++) { CreateAccessKeyResponse response = Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); keyIds[i] = response.AccessKey.AccessKeyId; } ListAccessKeysResponse listRes = Client.ListAccessKeys(new ListAccessKeysRequest() { UserName = username }); int matches = 0; foreach (AccessKeyMetadata akm in listRes.AccessKeyMetadata) { if (akm.AccessKeyId.Equals(keyIds[0])) matches |= 1; if (akm.AccessKeyId.Equals(keyIds[1])) matches |= 2; } Assert.AreEqual(3, matches); } finally { IAMUtil.DeleteTestUsers(Client, username); } } // There is a limit of 2 access keys per user [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] [ExpectedException(typeof(LimitExceededException))] public void TestLimitExceedException() { string username = IAMUtil.CreateTestUser(Client); try { for (int i = 0; i < 3; i++) { Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); } } finally { IAMUtil.DeleteTestUsers(Client, username); } } [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] public void TestDeleteAccessKey() { string username = IAMUtil.CreateTestUser(Client); string[] keyIds = new string[2]; try { for (int i = 0; i < 2; i++) { CreateAccessKeyResponse response = Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); keyIds[i] = response.AccessKey.AccessKeyId; } ListAccessKeysResponse lakRes = Client.ListAccessKeys(new ListAccessKeysRequest() { UserName = username }); Assert.AreEqual(2, lakRes.AccessKeyMetadata.Count()); Client.DeleteAccessKey(new DeleteAccessKeyRequest() { UserName = username, AccessKeyId = keyIds[0] }); lakRes = Client.ListAccessKeys(new ListAccessKeysRequest() { UserName = username }); Assert.AreEqual(1, lakRes.AccessKeyMetadata.Count()); Assert.AreEqual(keyIds[1], lakRes.AccessKeyMetadata[0].AccessKeyId); } finally { IAMUtil.DeleteTestUsers(Client, username); } } [Ignore("Excluding tests that need IAM Write/Permissions management.")] [TestMethod] [TestCategory("IdentityManagement")] [ExpectedException(typeof(NoSuchEntityException))] public void TestDeleteNonExistentAccessKeyException() { string username = IAMUtil.CreateTestUser(Client); try { CreateAccessKeyResponse response = Client.CreateAccessKey(new CreateAccessKeyRequest() { UserName = username }); string keyId = response.AccessKey.AccessKeyId; Client.DeleteAccessKey(new DeleteAccessKeyRequest() { UserName = username, AccessKeyId = keyId }); Client.DeleteAccessKey(new DeleteAccessKeyRequest() { UserName = username, AccessKeyId = keyId }); } finally { IAMUtil.DeleteTestUsers(Client, username); } } } }