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 GroupTests
///
[TestClass]
public class GroupTests : TestBase
{
public GroupTests()
{
}
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);
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestCreateGetGroup()
{
string groupname = Guid.NewGuid().ToString().Replace('-', '0');
try
{
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname });
GetGroupResponse response = Client.GetGroup(new GetGroupRequest() { GroupName = groupname });
Assert.AreNotEqual(DateTime.MinValue, response.Group.CreateDate);
Assert.AreEqual(0, response.Users.Count());
}
finally
{
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestGroupWithUsers()
{
string
username1 = "user1" + DateTime.Now.Ticks,
username2 = "user2" + DateTime.Now.Ticks,
username3 = "user3" + DateTime.Now.Ticks,
groupname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username1, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username2, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username3, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username1 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username2 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username3 });
GetGroupResponse response =
Client.GetGroup(new GetGroupRequest() { GroupName = groupname });
Assert.AreEqual(3, response.Users.Count());
Assert.AreEqual(false, 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(username3))
matches |= 4;
}
Assert.AreEqual(7, matches);
}
finally
{
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username1 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username2 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username3 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username1 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username2 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username3 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestRemoveUsersFromGroup()
{
string
username1 = "user1" + DateTime.Now.Ticks,
username2 = "user2" + DateTime.Now.Ticks,
username3 = "user3" + DateTime.Now.Ticks,
groupname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username1, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username2, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username3, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username1 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username2 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username3 });
GetGroupResponse response =
Client.GetGroup(new GetGroupRequest() { GroupName = groupname });
Assert.AreEqual(3, response.Users.Count());
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username2 });
response =
Client.GetGroup(new GetGroupRequest() { GroupName = groupname });
Assert.AreEqual(2, response.Users.Count());
int matches = 0;
foreach (User u in response.Users)
{
if (u.UserName.Equals(username1))
matches |= 1;
if (u.UserName.Equals(username2))
Assert.Fail();
if (u.UserName.Equals(username3))
matches |= 4;
}
Assert.AreEqual(5, matches);
}
finally
{
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username1 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username3 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username1 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username2 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username3 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestGroupPaging()
{
string
username1 = "user1" + DateTime.Now.Ticks,
username2 = "user2" + DateTime.Now.Ticks,
username3 = "user3" + DateTime.Now.Ticks,
username4 = "user4" + DateTime.Now.Ticks,
groupname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username1, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username2, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username3, Path = IAMUtil.TEST_PATH });
Client.CreateUser(new CreateUserRequest() { UserName = username4, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username1 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username2 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username3 });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = groupname, UserName = username4 });
GetGroupResponse response =
Client.GetGroup(new GetGroupRequest() { GroupName = groupname, MaxItems = 2 });
Assert.AreEqual(2, response.Users.Count());
Assert.AreEqual(true, response.IsTruncated);
string marker = response.Marker;
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(username3))
matches |= 4;
if (u.UserName.Equals(username4))
matches |= 8;
}
response = Client.GetGroup(new GetGroupRequest() { GroupName = groupname, 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(username3))
matches |= 4;
if (u.UserName.Equals(username4))
matches |= 8;
}
Assert.AreEqual(15, matches);
}
finally
{
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username1 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username2 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username3 });
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { GroupName = groupname, UserName = username4 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username1 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username2 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username3 });
Client.DeleteUser(new DeleteUserRequest() { UserName = username4 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestListGroupWithPaths()
{
string
groupname1 = "group1" + DateTime.Now.Ticks,
groupname2 = "group2" + DateTime.Now.Ticks,
groupname3 = "group3" + DateTime.Now.Ticks,
groupname4 = "group4" + DateTime.Now.Ticks;
string
pathA = IAMUtil.MakePath("A"),
pathB = IAMUtil.MakePath("B");
try
{
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname1, Path = pathA });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname2, Path = pathA });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname3, Path = pathB });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname4, Path = pathB });
ListGroupsResponse response =
Client.ListGroups(new ListGroupsRequest() { PathPrefix = pathA });
Assert.AreEqual(2, response.Groups.Count());
int matches = 0;
foreach (Group g in response.Groups)
{
if(g.GroupName.Equals(groupname1))
matches |= 1;
if(g.GroupName.Equals(groupname2))
matches |= 2;
if(g.GroupName.Equals(groupname3))
Assert.Fail();
if(g.GroupName.Equals(groupname4))
Assert.Fail();
}
response = Client.ListGroups(new ListGroupsRequest() { PathPrefix = pathB });
Assert.AreEqual(2, response.Groups.Count());
foreach (Group g in response.Groups)
{
if (g.GroupName.Equals(groupname1))
Assert.Fail();
if (g.GroupName.Equals(groupname2))
Assert.Fail();
if (g.GroupName.Equals(groupname3))
matches |= 4;
if (g.GroupName.Equals(groupname4))
matches |= 8;
}
Assert.AreEqual(15, matches);
}
finally
{
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname1 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname2 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname3 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname4 });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
public void TestListGroupsPaging()
{
string
groupname1 = "group1" + DateTime.Now.Ticks,
groupname2 = "group2" + DateTime.Now.Ticks,
groupname3 = "group3" + DateTime.Now.Ticks,
groupname4 = "group4" + DateTime.Now.Ticks;
try
{
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname1, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname2, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname3, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = groupname4, Path = IAMUtil.TEST_PATH });
ListGroupsResponse response =
Client.ListGroups(new ListGroupsRequest());
Assert.IsTrue(response.Groups.Count >= 4);
response =
Client.ListGroups(new ListGroupsRequest() { MaxItems = 2, PathPrefix = IAMUtil.TEST_PATH });
Assert.AreEqual(2, response.Groups.Count());
Assert.AreEqual(true, response.IsTruncated);
string marker = response.Marker;
int matches = 0;
foreach (Group g in response.Groups)
{
if (g.GroupName.Equals(groupname1))
matches |= 1;
if (g.GroupName.Equals(groupname2))
matches |= 2;
if (g.GroupName.Equals(groupname3))
matches |= 4;
if (g.GroupName.Equals(groupname4))
matches |= 8;
}
response = Client.ListGroups(new ListGroupsRequest() { Marker = marker, PathPrefix = IAMUtil.TEST_PATH });
Assert.AreEqual(2, response.Groups.Count());
Assert.AreEqual(false, response.IsTruncated);
foreach (Group g in response.Groups)
{
if (g.GroupName.Equals(groupname1))
matches |= 1;
if (g.GroupName.Equals(groupname2))
matches |= 2;
if (g.GroupName.Equals(groupname3))
matches |= 4;
if (g.GroupName.Equals(groupname4))
matches |= 8;
}
Assert.AreEqual(15, matches);
}
finally
{
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname1 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname2 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname3 });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = groupname4 });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(NoSuchEntityException))]
public void AddUserToNonExistentGroup()
{
string
username = "user" + DateTime.Now.Ticks,
grpname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { GroupName = grpname, UserName = username });
}
finally
{
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(EntityAlreadyExistsException))]
public void TestDoubleCreation()
{
string
grpname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateGroup(new CreateGroupRequest() { GroupName = grpname, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = grpname, Path = IAMUtil.TEST_PATH });
}
finally
{
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = grpname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(DeleteConflictException))]
public void TestDeleteUserInGroupThrowsException()
{
string
username = "user" + DateTime.Now.Ticks,
grpname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = grpname, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { UserName = username, GroupName = grpname });
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
}
finally
{
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { UserName = username, GroupName = grpname });
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = grpname });
}
}
[Ignore("Excluding tests that need IAM Write/Permissions management.")]
[TestMethod]
[TestCategory("IdentityManagement")]
[ExpectedException(typeof(DeleteConflictException))]
public void TestDeleteGroupWithUsersThrowsException()
{
string
username = "user" + DateTime.Now.Ticks,
grpname = "group" + DateTime.Now.Ticks;
try
{
Client.CreateUser(new CreateUserRequest() { UserName = username, Path = IAMUtil.TEST_PATH });
Client.CreateGroup(new CreateGroupRequest() { GroupName = grpname, Path = IAMUtil.TEST_PATH });
Client.AddUserToGroup(new AddUserToGroupRequest() { UserName = username, GroupName = grpname });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = grpname });
}
finally
{
Client.RemoveUserFromGroup(new RemoveUserFromGroupRequest() { UserName = username, GroupName = grpname });
Client.DeleteUser(new DeleteUserRequest() { UserName = username });
Client.DeleteGroup(new DeleteGroupRequest() { GroupName = grpname });
}
}
}
}