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 GetUserTest
///
[TestClass]
public class UserTests : TestBase
{
public UserTests()
{
}
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 PreTestRun()
{
IAMUtil.DeleteUsersAndGroupsInTestNameSpace(Client);
}
[TestMethod]
[TestCategory("IdentityManagement")]
[TestCategory("RequiresIAMUser")]
public void TestGetUserImplicit()
{
GetUserRequest request = new GetUserRequest();
GetUserResponse response = Client.GetUser(request);
Assert.IsFalse(string.IsNullOrEmpty(response.User.Arn));
// The assert will succeed if you run with root credentials.
//Assert.AreEqual(string.Format("arn:aws:iam::{0}:root", response.User.UserId), response.User.Arn);
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestCreateGetUser()
{
string username = "sdk-testuser-" + DateTime.Now.Ticks;
try
{
CreateUserRequest request = new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH };
CreateUserResponse response = Client.CreateUser(request);
Assert.AreEqual(username, response.User.UserName);
GetUserResponse getResponse = Client.GetUser(new GetUserRequest() { UserName = username });
Assert.AreEqual(username, getResponse.User.UserName);
Assert.AreNotEqual(DateTime.MinValue, getResponse.User.CreateDate);
}
finally
{
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestListUsers()
{
string username1 = IAMUtil.CreateTestUser(Client);
string username2 = IAMUtil.CreateTestUser(Client);
string username3 = IAMUtil.CreateTestUser(Client);
try
{
ListUsersResponse response = Client.ListUsers(new ListUsersRequest() { PathPrefix = IAMUtil.TEST_PATH });
Assert.AreEqual(3, response.Users.Count());
int matches = 0;
foreach(User user in response.Users)
{
if (user.UserName.Equals(username1))
matches |= 1;
if (user.UserName.Equals(username2))
matches |= 2;
if (user.UserName.Equals(username3))
matches |= 4;
}
Assert.AreEqual(7, matches);
}
finally
{
IAMUtil.DeleteTestUsers(Client, username1, username2, username3);
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestUserWithPath()
{
string username = "sdk-testuser-" + DateTime.Now.Ticks;
string path = IAMUtil.MakePath("one", "two", "three");
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = path });
GetUserResponse response = Client.GetUser(new GetUserRequest() { UserName = username });
Assert.AreEqual(username, response.User.UserName);
Assert.AreEqual(path, response.User.Path);
}
finally
{
IAMUtil.DeleteTestUsers(Client, username);
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestListUsersByPath()
{
string username1 = "sdk-testuser1-" + DateTime.Now.Ticks;
string username2 = "sdk-testuser2-" + DateTime.Now.Ticks;
string username3 = "sdk-testuser3-" + DateTime.Now.Ticks;
string username4 = "sdk-testuser4-" + DateTime.Now.Ticks;
string pathA = IAMUtil.MakePath("A");
string pathB = IAMUtil.MakePath("B");
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username1, Path = pathA });
Client.CreateUser(new CreateUserRequest() { UserName = username2, Path = pathA });
Client.CreateUser(new CreateUserRequest() { UserName = username3, Path = pathB });
Client.CreateUser(new CreateUserRequest() { UserName = username4, Path = pathA });
ListUsersResponse response = Client.ListUsers(new ListUsersRequest() { PathPrefix = pathA });
Assert.AreEqual(3, response.Users.Count());
int matches = 0;
foreach (User u in response.Users)
{
if (u.UserName.Equals(username1))
matches |= 1;
if (u.UserName.Equals(username2))
matches |= 2;
if (u.UserName.Equals(username4))
matches |= 4;
if (u.UserName.Equals(username3))
Assert.Fail();
}
Assert.AreEqual(7, matches);
response = Client.ListUsers(new ListUsersRequest(){ PathPrefix = pathB });
Assert.AreEqual(1, response.Users.Count());
matches = 0;
foreach (User u in response.Users)
{
if (u.UserName.Equals(username1))
Assert.Fail();
if (u.UserName.Equals(username2))
Assert.Fail();
if (u.UserName.Equals(username4))
Assert.Fail();
if (u.UserName.Equals(username3))
matches = 1;
}
Assert.AreEqual(1, matches);
response = Client.ListUsers(new ListUsersRequest(){ PathPrefix = IAMUtil.TEST_PATH });
Assert.AreEqual(4, response.Users.Count());
}
finally
{
IAMUtil.DeleteTestUsers(Client, username1, username2, username3, username4);
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestListUsersMaxResults()
{
string username1 = IAMUtil.CreateTestUser(Client);
string username2 = IAMUtil.CreateTestUser(Client);
string username3 = IAMUtil.CreateTestUser(Client);
string username4 = IAMUtil.CreateTestUser(Client);
try
{
ListUsersResponse response = Client.ListUsers(new ListUsersRequest() { MaxItems = 2, PathPrefix = IAMUtil.TEST_PATH });
Assert.AreEqual(2, response.Users.Count());
Assert.AreEqual(true, response.IsTruncated);
int matches = 0;
foreach (User u in response.Users)
{
if (u.UserName.Equals(username1))
matches |= 1;
if (u.UserName.Equals(username2))
matches |= 2;
if (u.UserName.Equals(username4))
matches |= 3;
if (u.UserName.Equals(username3))
matches |= 4;
}
string marker = response.Marker;
response = Client.ListUsers(new ListUsersRequest() { PathPrefix = IAMUtil.TEST_PATH, Marker = marker });
Assert.AreEqual(2, response.Users.Count());
Assert.AreEqual(false, response.IsTruncated);
foreach (User u in response.Users)
{
if (u.UserName.Equals(username1))
matches |= 1;
if (u.UserName.Equals(username2))
matches |= 2;
if (u.UserName.Equals(username4))
matches |= 3;
if (u.UserName.Equals(username3))
matches |= 4;
}
Assert.AreEqual(7, matches);
}
finally
{
IAMUtil.DeleteTestUsers(Client, username1, username2, username3, username4);
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestUpdateUser()
{
string
username = "sdk-testuser-" + DateTime.Now.Ticks,
newusername = "sdk-testnewuser-" + DateTime.Now.Ticks;
string
firstPath = IAMUtil.MakePath("first"),
secondPath = IAMUtil.MakePath("second");
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = firstPath });
GetUserResponse response = Client.GetUser(new GetUserRequest() { UserName = username });
Assert.AreEqual(firstPath, response.User.Path);
string id = response.User.UserId;
Client.UpdateUser(new UpdateUserRequest() { UserName = username, NewPath = secondPath, NewUserName = newusername });
response = Client.GetUser(new GetUserRequest() { UserName = newusername });
Assert.AreEqual(newusername, response.User.UserName);
Assert.AreEqual(secondPath, response.User.Path);
Assert.AreEqual(id, response.User.UserId);
}
finally
{
Client.DeleteUser(new DeleteUserRequest() { UserName = newusername });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(NoSuchEntityException))]
public void TestDeleteUser()
{
string username = "sdk-testuser-" + DateTime.Now.Ticks;
Client.CreateUser(new CreateUserRequest() {UserName = username, Path = IAMUtil.TEST_PATH });
GetUserResponse response = Client.GetUser(new GetUserRequest() { UserName = username });
Assert.AreEqual(username, response.User.UserName);
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
Client.GetUser(new GetUserRequest() { UserName = username });
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(EntityAlreadyExistsException))]
public void TestDoubleCreateUser()
{
string username = "sdk-testuser-" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH });
}
finally
{
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(NoSuchEntityException))]
public void TestUpdateNonexistantUser()
{
string username = "sdk-testuser-" + DateTime.Now.Ticks;
Client.UpdateUser(new UpdateUserRequest() { UserName = username, NewPath = "/lala/" });
}
}
}