DocSpace-buildtools/thirdparty/rackspace-net-sdk/test/Rackspace.UnitTests/RackConnect/v3/PublicIPTests.cs
2021-05-18 12:23:19 +03:00

313 lines
11 KiB
C#

using System;
using System.Linq;
using System.Net;
using Newtonsoft.Json.Linq;
using Rackspace.Synchronous;
using Rackspace.Testing;
using Xunit;
namespace Rackspace.RackConnect.v3
{
public class PublicIPTests
{
private readonly RackConnectService _rackConnectService;
public PublicIPTests()
{
_rackConnectService = new RackConnectService(Stubs.IdentityService, "region");
}
[Fact]
public void ListPublicIPs()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new[] {new PublicIP {Id = id}});
var results = _rackConnectService.ListPublicIPs();
httpTest.ShouldHaveCalled($"*/public_ips");
Assert.NotNull(results);
Assert.Equal(1, results.Count());
Assert.Equal(id, results.First().Id);
Assert.All(results.OfType<IServiceResource<RackConnectService>>(), ip => Assert.NotNull(ip.Owner));
}
}
[Fact]
public void ListPublicIPsForServer()
{
using (var httpTest = new HttpTest())
{
string serverId = Guid.NewGuid().ToString();
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new[] {new PublicIP {Id = id}});
var results = _rackConnectService.ListPublicIPs(new ListPublicIPsFilter {ServerId = serverId});
httpTest.ShouldHaveCalled($"*/public_ips?cloud_server_id={serverId}");
Assert.NotNull(results);
Assert.Equal(1, results.Count());
Assert.Equal(id, results.First().Id);
}
}
[Fact]
public void ListPersistentPublicIPs()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new[] { new PublicIP { Id = id } });
var results = _rackConnectService.ListPublicIPs(new ListPublicIPsFilter { IsRetained = true });
httpTest.ShouldHaveCalled($"*/public_ips?retain=True");
Assert.NotNull(results);
Assert.Equal(1, results.Count());
Assert.Equal(id, results.First().Id);
}
}
[Fact]
public void GetPublicIP()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id });
var result = _rackConnectService.GetPublicIP(id);
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
Assert.NotNull(result);
Assert.Equal(id, result.Id);
Assert.NotNull(((IServiceResource<RackConnectService>)result).Owner);
}
}
[Fact]
public void CreatePublicIP()
{
using (var httpTest = new HttpTest())
{
string serverId = Guid.NewGuid().ToString();
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id });
var ipRequest = new PublicIPCreateDefinition {ServerId = serverId};
var result = _rackConnectService.CreatePublicIP(ipRequest);
httpTest.ShouldHaveCalled($"*/public_ips");
Assert.NotNull(result);
Assert.Equal(id, result.Id);
Assert.NotNull(((IServiceResource<RackConnectService>)result).Owner);
}
}
[Fact]
public void CreatePublicIP_RetriesWhenTheServerIsNotFound()
{
using (var httpTest = new HttpTest())
{
string serverId = Guid.NewGuid().ToString();
Identifier id = Guid.NewGuid();
httpTest.RespondWith((int)HttpStatusCode.Conflict, $"Cloud Server {serverId} does not exist");
httpTest.RespondWithJson(new PublicIP { Id = id });
var ipRequest = new PublicIPCreateDefinition { ServerId = serverId };
var result = _rackConnectService.CreatePublicIP(ipRequest);
httpTest.ShouldHaveCalled($"*/public_ips");
Assert.NotNull(result);
Assert.Equal(id, result.Id);
Assert.NotNull(((IServiceResource<RackConnectService>)result).Owner);
}
}
[Fact]
public void UpdatePublicIP()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id });
var result = _rackConnectService.UpdatePublicIP(id, new PublicIPUpdateDefinition());
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
Assert.NotNull(result);
Assert.Equal(id, result.Id);
Assert.NotNull(((IServiceResource<RackConnectService>)result).Owner);
}
}
[Fact]
public void AssignPublicIP()
{
using (var httpTest = new HttpTest())
{
Identifier serverId = Guid.NewGuid();
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP {Id = id});
httpTest.RespondWithJson(new PublicIP {Id = id, Server = new PublicIPServerAssociation {ServerId = serverId}});
var ip = _rackConnectService.GetPublicIP(id);
ip.Assign(serverId);
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
Assert.NotNull(ip.Server);
Assert.Equal(serverId, ip.Server.ServerId);
}
}
[Fact]
public void AssignPublicIP_RetriesWhenTheServerIsNotFound()
{
using (var httpTest = new HttpTest())
{
Identifier serverId = Guid.NewGuid();
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id });
httpTest.RespondWith((int)HttpStatusCode.Conflict, $"Cloud Server {serverId} does not exist");
httpTest.RespondWithJson(new PublicIP { Id = id, Server = new PublicIPServerAssociation { ServerId = serverId } });
var ip = _rackConnectService.GetPublicIP(id);
ip.Assign(serverId);
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
Assert.NotNull(ip.Server);
Assert.Equal(serverId, ip.Server.ServerId);
}
}
[Fact]
public void UnassignPublicIP()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP {Id = id, Server = new PublicIPServerAssociation()});
httpTest.RespondWithJson(new PublicIP {Id = id });
var ip = _rackConnectService.GetPublicIP(id);
ip.Unassign();
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
Assert.Null(ip.Server);
}
}
[Fact]
public void WaitUntilActive()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP {Id = id, Status = PublicIPStatus.Creating});
httpTest.RespondWithJson(new PublicIP {Id = id, Status = PublicIPStatus.Active, PublicIPv4Address = "10.0.0.1"});
var ip = _rackConnectService.GetPublicIP(id);
ip.WaitUntilActive();
Assert.NotNull(ip);
Assert.Equal(id, ip.Id);
Assert.NotNull(ip.PublicIPv4Address);
}
}
[Fact]
public void WaitUntilActive_ThrowsException_WhenAddFails()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Creating });
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.CreateFailed, StatusDetails = "No IP for you!"});
var ip = _rackConnectService.GetPublicIP(id);
Assert.Throws<ServiceOperationFailedException>(() => ip.WaitUntilActive());
}
}
[Fact]
public void WaitUntilActive_ThrowsException_WhenCalledOnManuallyCreatedInstance()
{
var ip = new PublicIP();
Assert.Throws<InvalidOperationException>(() => ip.WaitUntilActive());
}
[Fact]
public void DeletePublicIP()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id });
_rackConnectService.DeletePublicIP(id);
httpTest.ShouldHaveCalled($"*/public_ips/{id}");
}
}
[Fact]
public void WaitUntilDeleted()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Active });
httpTest.RespondWith((int) HttpStatusCode.NoContent, "All gone!");
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Deleted });
var ip = _rackConnectService.GetPublicIP(id);
ip.Delete();
ip.WaitUntilDeleted();
}
}
[Fact]
public void WaitUntilDeleted_ThrowsException_WhenDeleteFails()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Active });
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Active });
httpTest.RespondWith(JObject.Parse(@"{'status':'REMOVE_FAILED'}").ToString());
var ip = _rackConnectService.GetPublicIP(id);
ip.Delete();
Assert.Throws<ServiceOperationFailedException>(() =>ip.WaitUntilDeleted());
}
}
[Fact]
public void WaitUntilDeleted_AcceptsNotFoundExceptionAsSuccess()
{
using (var httpTest = new HttpTest())
{
Identifier id = Guid.NewGuid();
httpTest.RespondWithJson(new PublicIP { Id = id, Status = PublicIPStatus.Active });
httpTest.RespondWith((int) HttpStatusCode.NoContent, "All gone!");
httpTest.RespondWith((int) HttpStatusCode.NotFound, "Not here, boss!");
var ip = _rackConnectService.GetPublicIP(id);
ip.Delete();
ip.WaitUntilDeleted();
}
}
[Fact]
public void WaitUntilDeleted_ThrowsException_WhenCalledOnManuallyCreatedInstance()
{
var ip = new PublicIP();
Assert.Throws<InvalidOperationException>(() => ip.WaitUntilDeleted());
}
}
}