Skip to content

Commit af334b4

Browse files
committed
Merge pull request #8 from alanquillin/AddMissingIdentityTests_GetTenants_ListCredencials_GetUserCredentials
[Delivers #43555619 #43555611 #43555609] Added Missing Identity Tests: GetTenents, ListCredentials, GetCredentials
2 parents 8f3d0a0 + e3fab09 commit af334b4

9 files changed

Lines changed: 117 additions & 23 deletions

File tree

src/corelib/Core/Domain/UserCredential.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ namespace net.openstack.Core.Domain
55
[DataContract]
66
public class UserCredential
77
{
8+
[DataMember]
9+
public string Name { get; set; }
10+
811
[DataMember(Name = "username")]
912
public string Username { get; set; }
1013

src/corelib/Core/IIdentityProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public interface IIdentityProvider
2121

2222
Tenant[] ListTenants(CloudIdentity identity);
2323
UserAccess GetUserAccess(CloudIdentity identity, bool forceCacheRefresh = false);
24+
UserCredential GetUserCredential(CloudIdentity identity, string userId, string credentialKey);
2425
}
2526
}

src/corelib/Providers/Rackspace/GeographicalIdentityProvider.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,40 @@ public bool SetUserPassword(CloudIdentity identity, string userId, string userna
127127
public UserCredential[] ListUserCredentials(CloudIdentity identity, string userId)
128128
{
129129
var urlPath = string.Format("v2.0/users/{0}/OS-KSADM/credentials", userId);
130-
var response = ExecuteRESTRequest<UserCredentialsResponse>(identity, urlPath, HttpMethod.GET);
130+
var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.GET);
131131

132-
if (response == null || response.Data == null)
132+
if (response == null || string.IsNullOrWhiteSpace(response.RawBody))
133133
return null;
134134

135-
return response.Data.Credentials.Select(c => c.UserCredential).ToArray();
135+
var jObject = JObject.Parse(response.RawBody);
136+
var credsArray = (JArray)jObject["credentials"];
137+
var creds = new List<UserCredential>();
138+
139+
foreach (JObject jToken in credsArray)
140+
{
141+
foreach (JProperty property in jToken.Properties())
142+
{
143+
var cred = (JObject)property.Value;
144+
creds.Add(new UserCredential
145+
{
146+
Name = property.Name,
147+
APIKey = cred["apiKey"].ToString(),
148+
Username = cred["username"].ToString()
149+
});
150+
}
151+
152+
}
153+
154+
return creds.ToArray();
155+
}
156+
157+
public UserCredential GetUserCredential(CloudIdentity identity, string userId, string credentialKey)
158+
{
159+
var creds = ListUserCredentials(identity, userId);
160+
161+
var cred = creds.FirstOrDefault(c => c.Name.Equals(credentialKey, StringComparison.OrdinalIgnoreCase));
162+
163+
return cred;
136164
}
137165

138166
public UserCredential UpdateUserCredentials(CloudIdentity identity, string userId, string apiKey)

src/corelib/Providers/Rackspace/IdentityProvider.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ public UserAccess GetUserAccess(CloudIdentity identity, bool forceCacheRefresh =
145145
return provider.GetUserAccess(identity, forceCacheRefresh);
146146
}
147147

148+
public UserCredential GetUserCredential(CloudIdentity identity, string userId, string credentialKey)
149+
{
150+
var provider = GetProvider(identity);
151+
return provider.GetUserCredential(identity, userId, credentialKey);
152+
}
153+
148154
public string GetToken(CloudIdentity identity, bool forceCacheRefresh = false)
149155
{
150156
var provider = GetProvider(identity);

src/corelib/Providers/Rackspace/Objects/Response/UserCredentialResponse.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@ internal class UserCredentialResponse
1717
[DataContract]
1818
internal class UserCredentialsResponse
1919
{
20-
[DataMember(Name = "credentials")]
21-
public Credencials[] Credentials { get; set; }
22-
}
23-
24-
[DataContract]
25-
internal class Credencials
26-
{
27-
[DataMember(Name = "RAX-KSKEY:apiKeyCredentials")]
28-
public UserCredential UserCredential { get; set; }
20+
public List<UserCredential> Credentials { get; set; }
2921
}
3022
}

src/testing/integration/Bootstrapper.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.IO;
33
using System.Text;
44
using net.openstack.Core.Domain;
5+
using net.openstack.Providers.Rackspace;
56

67
namespace Net.OpenStack.Testing.Integration
78
{
@@ -48,11 +49,29 @@ public static void Initialize()
4849

4950
public class OpenstackNetSetings
5051
{
51-
public CloudIdentity TestIdentity { get; set; }
52+
public ExtendedCloudIdentity TestIdentity { get; set; }
5253

53-
public CloudIdentity TestAdminIdentity { get; set; }
54+
public ExtendedCloudIdentity TestAdminIdentity { get; set; }
5455

5556
public string RackspaceExtendedIdentityUSUrl { get; set; }
5657
public string RackspaceExtendedIdentityUKUrl { get; set; }
5758
}
59+
60+
public class ExtendedCloudIdentity : CloudIdentity
61+
{
62+
public string TenantId { get; set; }
63+
}
64+
65+
public class ExtendedRackspaceCloudIdentity : RackspaceCloudIdentity
66+
{
67+
public string TenantId { get; set; }
68+
69+
public ExtendedRackspaceCloudIdentity(ExtendedCloudIdentity cloudIdentity)
70+
{
71+
this.APIKey = cloudIdentity.APIKey;
72+
this.Password = cloudIdentity.Password;
73+
this.Username = cloudIdentity.Username;
74+
this.TenantId = cloudIdentity.TenantId;
75+
}
76+
}
5877
}

src/testing/integration/Providers/Rackspace/ExtendedIdentityTests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
using System;
2-
using System.Text;
3-
using System.Collections.Generic;
4-
using System.Linq;
52
using Microsoft.VisualStudio.TestTools.UnitTesting;
63
using SimpleRestServices.Client;
74
using net.openstack;

src/testing/integration/Providers/Rackspace/IdentityFull.orderedtest

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<OrderedTest name="identityfull" storage="c:\workspace\openstack.net\src\testing\integration\providers\rackspace\identityfull.orderedtest" id="a5917904-bc4e-4a43-8f0b-0936087905c6" continueAfterFailure="true" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
3-
<Execution id="b75c2d1d-8e8a-483c-9c21-6c5bc15ebfc8" />
3+
<Execution id="1da0ea4a-4e72-4f85-b722-7144d662d214" />
44
<TestLinks>
55
<TestLink id="e36560a2-71a9-2e97-f0e7-3128ecc781d3" name="Should_Authenticate_Test_Identity" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
66
<TestLink id="57443066-dd7a-6ca1-1d6a-c72b84384cc7" name="Should_Authenticate_Test_Admin_Identity" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
@@ -38,5 +38,8 @@
3838
<TestLink id="32bfb759-8416-e869-d329-4ef743de6428" name="Should_Update_NewUser_Username_And_Email_When_Requesting_As_Self" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
3939
<TestLink id="88336170-f0bf-9c66-8b67-cc22b2ad0d85" name="Should_Delete_NewUser_When_Requesting_As_User_Admin" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
4040
<TestLink id="8a813024-7d0f-9f31-ac53-ec8c2af84b01" name="Should_Throw_Exception_When_Requesting_The_NewUser_After_It_Has_Been_Deleted_When_Requesting_As_User_Admin" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
41+
<TestLink id="461a8ad9-687a-8aec-5470-0db370570bae" name="Should_Return_The_Users_Tenant_When_Requesting_As_Non_Admin" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
42+
<TestLink id="ead94b35-f67d-8e7a-6826-3ae8583c6603" name="Should_Return_List_Of_Users_Credentials_When_Requesting_As_Non_Admin" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
43+
<TestLink id="00326cb1-bdce-b4b7-bc50-d692260aa3b9" name="Should_Return_User_API_Credential_When_Requesting_As_Non_Admin" storage="..\..\bin\debug\openstacknet.testing.integration.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
4144
</TestLinks>
4245
</OrderedTest>

src/testing/integration/Providers/Rackspace/IdentityTests.cs

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@ namespace Net.OpenStack.Testing.Integration.Providers.Rackspace
1111
public class IdentityTests
1212
{
1313
private TestContext testContextInstance;
14-
private static RackspaceCloudIdentity _testIdentity;
15-
private static RackspaceCloudIdentity _testAdminIdentity;
14+
private static ExtendedRackspaceCloudIdentity _testIdentity;
15+
private static ExtendedRackspaceCloudIdentity _testAdminIdentity;
1616
private static User _userDetails;
1717
private static User _adminUserDetails;
1818
private static NewUser _newTestUser1;
1919
private const string NewUserPassword = "My_n3wuser2_p@$$ssw0rd";
20-
private const string NewPassword = "My_n3w_p@$$ssw0rd";
2120

2221
/// <summary>
2322
///Gets or sets the test context which provides
@@ -38,8 +37,8 @@ public TestContext TestContext
3837
[ClassInitialize]
3938
public static void Init(TestContext context)
4039
{
41-
_testIdentity = new RackspaceCloudIdentity(Bootstrapper.Settings.TestIdentity);
42-
_testAdminIdentity = new RackspaceCloudIdentity(Bootstrapper.Settings.TestAdminIdentity);
40+
_testIdentity = new ExtendedRackspaceCloudIdentity(Bootstrapper.Settings.TestIdentity);
41+
_testAdminIdentity = new ExtendedRackspaceCloudIdentity(Bootstrapper.Settings.TestAdminIdentity);
4342
}
4443

4544
[TestMethod]
@@ -400,5 +399,51 @@ public void Should_List_Only_Self_When_Retrieving_List_Of_Users_With_Non_Admin_A
400399
Assert.IsTrue(users.Count() == 1);
401400
Assert.AreEqual(_newTestUser1.Username, users[0].Username);
402401
}
402+
403+
[TestMethod]
404+
public void Should_Return_The_Users_Tenant_When_Requesting_As_Non_Admin()
405+
{
406+
IIdentityProvider provider = new IdentityProvider();
407+
408+
var tenants = provider.ListTenants(_testIdentity);
409+
410+
Assert.IsTrue(tenants.Any());
411+
412+
if(!string.IsNullOrWhiteSpace(_testIdentity.TenantId))
413+
{
414+
Assert.IsTrue(tenants.Any(t => t.Id == _testIdentity.TenantId));
415+
}
416+
}
417+
418+
[TestMethod]
419+
public void Should_Return_List_Of_Users_Credentials_When_Requesting_As_Non_Admin()
420+
{
421+
IIdentityProvider provider = new IdentityProvider();
422+
423+
var creds = provider.ListUserCredentials(_testIdentity, _userDetails.Id);
424+
425+
Assert.IsNotNull(creds);
426+
Assert.IsTrue(creds.Any());
427+
428+
foreach (var cred in creds)
429+
{
430+
Assert.IsFalse(string.IsNullOrWhiteSpace(cred.Name));
431+
Assert.IsFalse(string.IsNullOrWhiteSpace(cred.APIKey));
432+
Assert.IsFalse(string.IsNullOrWhiteSpace(cred.Username));
433+
}
434+
}
435+
436+
[TestMethod]
437+
public void Should_Return_User_API_Credential_When_Requesting_As_Non_Admin()
438+
{
439+
IIdentityProvider provider = new IdentityProvider();
440+
441+
var cred = provider.GetUserCredential(_testIdentity, _userDetails.Id, "RAX-KSKEY:apiKeyCredentials");
442+
443+
Assert.IsNotNull(cred);
444+
Assert.AreEqual("RAX-KSKEY:apiKeyCredentials", cred.Name);
445+
Assert.IsFalse(string.IsNullOrWhiteSpace(cred.APIKey));
446+
Assert.IsFalse(string.IsNullOrWhiteSpace(cred.Username));
447+
}
403448
}
404449
}

0 commit comments

Comments
 (0)