public void Kill() { // Arrange const string userId1 = "UserID1"; const string userId2 = "UserID2"; const string runspaceId = "RunspaceId"; const string sessionId = "SessionId"; var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); _multiTenantRunspaceProvider.StartCreate(userId1, sessionTokenMock.Object, null, false, null, null); _multiTenantRunspaceProvider.StartCreate(userId1, sessionTokenMock.Object, null, false, null, null); _multiTenantRunspaceProvider.StartCreate(userId2, sessionTokenMock.Object, null, false, null, null); // Act _multiTenantRunspaceProvider.Kill(userId1, runspaceId); // Assert runspaceProviderMockClass.Verify( mock => mock.Kill( It.Is <string>(s => s == runspaceId)), Times.Exactly(1)); }
public void List() { // Arrange const string userId1 = "UserID1"; const string userId2 = "UserID2"; const string runspaceId = "RunspaceId"; const string sessionId = "SessionId"; var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); _multiTenantRunspaceProvider.StartCreate(userId1, sessionTokenMock.Object, null, false, null, null); _multiTenantRunspaceProvider.StartCreate(userId1, sessionTokenMock.Object, null, false, null, null); _multiTenantRunspaceProvider.StartCreate(userId2, sessionTokenMock.Object, null, false, null, null); // Act var actualUser1 = _multiTenantRunspaceProvider.List(userId1); var actualUser2 = _multiTenantRunspaceProvider.List(userId2); // Assert runspaceProviderMockClass.Verify( mock => mock.Get( It.IsAny <string>()), Times.Exactly(3)); Assert.AreEqual(2, actualUser1.Count()); Assert.AreEqual(1, actualUser2.Count()); }
public void CreateRunspaceWithoutConnectVcScript() { // Arrange const string userId = "UserID"; const string runspaceId = "RunspaceId"; const string sessionId = "SessionId"; const string runspaceIp = "127.0.0.1"; var testStartTime = DateTime.Now; var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); // Act var actual = _multiTenantRunspaceProvider.StartCreate(userId, sessionTokenMock.Object, null, false, null, null); // Assert runspaceProviderMockClass.Verify(mock => mock.StartCreate(), Times.Once()); Assert.AreEqual(runspaceId, actual.Id); Assert.NotNull(actual.Endpoint); Assert.AreEqual(runspaceIp, actual.Endpoint.Address.ToString()); Assert.AreEqual(RunspaceState.Ready, actual.State); Assert.AreEqual(false, actual.RunVcConnectionScript); Assert.AreEqual(null, actual.Name); Assert.AreEqual(null, actual.ErrorDetails); Assert.AreEqual(null, actual.VcConnectionScriptId); Assert.IsTrue(actual.CreationTime >= testStartTime && actual.CreationTime <= DateTime.Now); }
public void CreateRunspaceStartingVcConnectionSsoError() { // Arrange const string userId = "UserID"; const string runspaceId = "RunspaceId"; const string sessionId = "SessionId"; const string runspaceName = "TestRunspaceName"; const string ssoError = "Acquire Bearer Token Fails"; var testStartTime = DateTime.Now; var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; var rawSamlToken = new XmlDocument(); rawSamlToken.LoadXml("<saml />"); var samlTokenMock = new Mock <ISamlToken>(); samlTokenMock.Setup(x => x.RawXmlElement).Returns(rawSamlToken.DocumentElement); var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); sessionTokenMock.Setup(x => x.HoKSamlToken).Returns(samlTokenMock.Object); var stsClientMock = new Mock <ISolutionStsClient>(); stsClientMock .Setup(x => x.IssueBearerTokenBySolutionToken(rawSamlToken.DocumentElement)) .Callback(() => { throw new Exception(ssoError); }) .Returns(rawSamlToken.DocumentElement); _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); // Act var actual = _multiTenantRunspaceProvider .StartCreate(userId, sessionTokenMock.Object, runspaceName, true, stsClientMock.Object, "vcEndpoint"); // Give small amount of time internal thread to start and SSO Error to happen Thread.Sleep(100); actual = _multiTenantRunspaceProvider.Get(userId, runspaceId); // Assert Assert.AreEqual(runspaceId, actual.Id); Assert.AreEqual(RunspaceState.Error, actual.State); Assert.AreEqual(true, actual.RunVcConnectionScript); Assert.AreEqual(runspaceName, actual.Name); Assert.NotNull(actual.ErrorDetails); Assert.AreEqual(ssoError, actual.ErrorDetails.Message); Assert.AreEqual(null, actual.VcConnectionScriptId); Assert.IsTrue(actual.CreationTime >= testStartTime && actual.CreationTime <= DateTime.Now); }
public void CreateRunspaceStartingVcConnectionProcessingSsoRequests() { // Arrange const string userId = "UserID"; const string runspaceId = "RunspaceId"; const string sessionId = "SessionId"; const string runspaceName = "TestRunspaceName"; var testStartTime = DateTime.Now; var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; var rawSamlToken = new XmlDocument(); rawSamlToken.LoadXml("<saml />"); var samlTokenMock = new Mock <ISamlToken>(); samlTokenMock.Setup(x => x.RawXmlElement).Returns(rawSamlToken.DocumentElement); var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); sessionTokenMock.Setup(x => x.HoKSamlToken).Returns(samlTokenMock.Object); var stsClientMock = new Mock <ISolutionStsClient>(); stsClientMock .Setup(x => x.IssueBearerTokenBySolutionToken(rawSamlToken.DocumentElement)) .Callback(() => { Thread.Sleep(200); }) .Returns(rawSamlToken.DocumentElement); _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); // Act var actual = _multiTenantRunspaceProvider .StartCreate(userId, sessionTokenMock.Object, runspaceName, true, stsClientMock.Object, "vcEndpoint"); // Assert runspaceProviderMockClass.Verify(mock => mock.StartCreate(), Times.Once()); Assert.AreEqual(runspaceId, actual.Id); Assert.AreEqual(RunspaceState.Creating, actual.State); Assert.AreEqual(true, actual.RunVcConnectionScript); Assert.AreEqual(runspaceName, actual.Name); Assert.AreEqual(null, actual.ErrorDetails); Assert.AreEqual(null, actual.VcConnectionScriptId); Assert.IsTrue(actual.CreationTime >= testStartTime && actual.CreationTime <= DateTime.Now); }
public void CreateWhenInvalidUser() { // Arrange const string userId = null; const string sessionId = "SessionId"; const string runspaceId = "RunspaceId"; var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); var runspaceProviderMockClass = new Mock <IRunspaceProvider>(); var runspaceProviderMock = MockRunspaceProvider(runspaceId, "127.0.0.1", runspaceProviderMockClass).Object; _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), runspaceProviderMock); // Act && Assert Assert.Throws <RunspaceProviderException>( () => _multiTenantRunspaceProvider.StartCreate(userId, sessionTokenMock.Object, null, false, null, null)); }
public void CleanupRemovesLocalDataForDisappearedRunspaces() { // Arrange const string userId = "UserID"; const string sessionId = "session-id-1"; const string runspaceId1 = "runspace-id-1"; const string runspaceId2 = "runspace-id-2"; var sessionTokenMock = new Mock <ISessionToken>(); sessionTokenMock.Setup(x => x.SessionId).Returns(sessionId); // Mock Runspaces Info var runspace1 = new Mock <IRunspaceInfo>(); runspace1.Setup(r => r.Id).Returns(runspaceId1); var runspace2 = new Mock <IRunspaceInfo>(); runspace2.Setup(r => r.Id).Returns(runspaceId2); // Mock RunspaceProvider var rsProvider = new Mock <IRunspaceProvider>(); rsProvider.Setup(p => p.Kill(It.IsAny <string>())); int callCount = 0; rsProvider.Setup(p => p.StartCreate()).Returns( () => { if (callCount == 0) { callCount = 1; return(runspace1.Object); } else { return(runspace2.Object); } }); rsProvider.Setup(p => p.List()).Returns(new[] { runspace1.Object }); rsProvider.Setup(p => p.Get(runspaceId1)).Returns(runspace1.Object); rsProvider.Setup(p => p.Get(runspaceId2)).Returns(runspace2.Object); // Mock RunsapcesStatsMonitor var runspacesStatsMonitor = new Mock <IRunspacesStatsMonitor>(); runspacesStatsMonitor.Setup(m => m.EvaluateRunspacesToRemove()).Returns(new string[] {}); runspacesStatsMonitor.Setup(m => m.GetRegisteredRunspaces()).Returns(new [] { runspaceId1, runspaceId2 }); runspacesStatsMonitor.Setup(m => m.Unregister(runspaceId2)); _multiTenantRunspaceProvider = new MultiTenantRunspaceProvider( MockLoggerFactory(), rsProvider.Object, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue, runspacesStatsMonitor.Object); _multiTenantRunspaceProvider.StartCreate(userId, sessionTokenMock.Object, null, false, null, null); _multiTenantRunspaceProvider.StartCreate(userId, sessionTokenMock.Object, null, false, null, null); // Act _multiTenantRunspaceProvider.Cleanup(); // Assert // Stats Monitor Unregister is called runspacesStatsMonitor.Verify(mock => mock.Unregister(runspaceId2), Times.AtLeastOnce); // Only Runspace2 is left var userRunspaces = _multiTenantRunspaceProvider.List(userId); Assert.AreEqual(1, userRunspaces.Count()); Assert.AreEqual(runspaceId1, userRunspaces.First().Id); }