/// <summary> /// Update a GAE version's serving status. /// </summary> /// <param name="status">The serving status to set. Either 'SERVING' or 'STOPPED'</param> /// <param name="serviceId">The id of the service</param> /// <param name="versionId">The id of the version</param> /// <returns>A task that will be completed once the operation is finished.</returns> public async Task UpdateVersionServingStatus(string status, string serviceId, string versionId) { try { // Create a version with just the service status set. Google.Apis.Appengine.v1.Data.Version version = new Google.Apis.Appengine.v1.Data.Version() { ServingStatus = status, }; var request = Service.Apps.Services.Versions.Patch(version, ProjectId, serviceId, versionId); // Only update the service status. request.UpdateMask = s_servingStatusUpdateMask; Operation operation = await request.ExecuteAsync(); await AwaitOperationAsync(operation); } catch (GoogleApiException ex) { Debug.WriteLine($"Failed to update serving status to '{status}': {ex.Message}"); throw new DataSourceException(ex.Message, ex); } catch (TimeoutException ex) { Debug.WriteLine($"Timeout while updating version: {ex.Message}"); throw new DataSourceException(ex.Message, ex); } }
public VersionViewModel( ServiceViewModel owner, Google.Apis.Appengine.v1.Data.Version version) { _owner = owner; this.version = version; root = _owner.root; Initialize(); }
public void TestOnStartVersionAsync() { const string versionId = "VersionId"; const string serviceId = "ServiceId"; var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?>() } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.StoppedStatus }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; ownerMock.Setup( o => o.DataSource.UpdateVersionServingStatus( GaeVersionExtensions.ServingStatus, serviceId, versionId)) .Returns(Task.CompletedTask); ownerMock.Setup(o => o.InvalidateServiceAsync(serviceId)).Returns(Task.CompletedTask); var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, true); objectUnderTest.Children.Add(null); ICommand onStartVersion = objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.CloudExplorerGaeStartVersion) .Command; onStartVersion.Execute(null); Assert.IsTrue(objectUnderTest.IsLoading); Assert.AreEqual(0, objectUnderTest.Children.Count); ownerMock.Verify( o => o.DataSource.UpdateVersionServingStatus( GaeVersionExtensions.ServingStatus, serviceId, versionId), Times.Once); ownerMock.Verify(o => o.InvalidateServiceAsync(serviceId), Times.Once); }
public VersionViewModel( GaeSourceRootViewModel owner, Service service, Google.Apis.Appengine.v1.Data.Version version, bool isLastVersion) { _owner = owner; _service = service; _version = version; _trafficAllocation = GaeServiceExtensions.GetTrafficAllocation(_service, _version.Id); _isLastVersion = isLastVersion; // Update the view. Caption = GetCaption(); UpdateIcon(); UpdateMenu(); }
public void TestOnMigrateTrafficCommandAsync() { const string versionId = "VersionId"; const string serviceId = "ServiceId"; var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?> { [versionId] = .5 } } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.ServingStatus }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; ownerMock.Setup(o => o.DataSource.UpdateServiceTrafficSplitAsync(It.IsAny <TrafficSplit>(), serviceId)) .Returns(Task.CompletedTask); ownerMock.Setup(o => o.InvalidateServiceAsync(serviceId)).Returns(Task.CompletedTask); var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, true); ICommand onMigrateTrafficCommand = objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.CloudExplorerGaeMigrateAllTrafficHeader) .Command; onMigrateTrafficCommand.Execute(null); Assert.IsTrue(objectUnderTest.IsLoading); ownerMock.Verify( o => o.DataSource.UpdateServiceTrafficSplitAsync( It.Is <TrafficSplit>(ts => Math.Abs(ts.Allocations[versionId].GetValueOrDefault() - 1.0) < .01), serviceId), Times.Once); ownerMock.Verify(o => o.InvalidateServiceAsync(serviceId), Times.Once); }
public void TestOnDeleteVersionAsync() { const string versionId = "VersionId"; const string serviceId = "ServiceId"; var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?>() } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.ServingStatus }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, false); PackageMock.Setup( p => p.UserPromptService.ActionPrompt( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>())) .Returns(true); ownerMock.Setup(o => o.DataSource.DeleteVersionAsync(serviceId, versionId)).Returns(Task.CompletedTask); ownerMock.Setup(o => o.InvalidateServiceAsync(serviceId)).Returns(Task.CompletedTask); objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.CloudExplorerGaeDeleteVersion) .Command.Execute(null); Assert.IsTrue(objectUnderTest.IsLoading); ownerMock.Verify(o => o.DataSource.DeleteVersionAsync(serviceId, versionId), Times.Once); ownerMock.Verify(o => o.InvalidateServiceAsync(serviceId), Times.Once); }
public void TestOnOpenOnCloudConsoleCommand() { const string versionId = "VersionId"; const string serviceId = "ServiceId"; const string projectId = "ProjectId"; var browserServiceMock = new Mock <IBrowserService>(); PackageMock.Setup(p => p.GetMefServiceLazy <IBrowserService>()).Returns(browserServiceMock.ToLazy()); var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?>() } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.ServingStatus }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, false); ownerMock.Setup(o => o.Context.CurrentProject).Returns(new Project { ProjectId = projectId }); objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.UiOpenOnCloudConsoleMenuHeader) .Command.Execute(null); browserServiceMock.Verify( b => b.OpenBrowser( It.Is <string>( s => s.StartsWith(VersionViewModel.CloudConsoleServiceInstanceUrl, StringComparison.Ordinal) && s.Contains(versionId) && s.Contains(serviceId) && s.Contains(projectId)))); }
public void TestUpdateServingStatusAsync_OnError(Exception e, string expectedCaption) { const string versionId = "VersionId"; const string serviceId = "ServiceId"; var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?>() } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.ServingStatus }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, true); ownerMock.Setup( o => o.DataSource.UpdateVersionServingStatus( GaeVersionExtensions.StoppedStatus, serviceId, versionId)) .Returns(Task.FromException(e)); ICommand onStartVersion = objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.CloudExplorerGaeStopVersion) .Command; onStartVersion.Execute(null); Assert.IsFalse(objectUnderTest.IsLoading); Assert.IsTrue(objectUnderTest.IsError); Assert.AreEqual(expectedCaption, objectUnderTest.Caption); }
public void TestOnOpenVersion() { const string versionId = "VersionId"; const string serviceId = "ServiceId"; const string versionUrl = "VersionUrl"; var browserServiceMock = new Mock <IBrowserService>(); PackageMock.Setup(p => p.GetMefServiceLazy <IBrowserService>()).Returns(browserServiceMock.ToLazy()); var service = new Service { Id = serviceId, Split = new TrafficSplit { Allocations = new Dictionary <string, double?>() } }; var version = new Version { Id = versionId, ServingStatus = GaeVersionExtensions.ServingStatus, VersionUrl = versionUrl }; var ownerMock = new Mock <IGaeSourceRootViewModel> { DefaultValueProvider = DefaultValueProvider.Mock }; var objectUnderTest = new VersionViewModel( ownerMock.Object, service, version, false); objectUnderTest.ContextMenu .ItemsSource.OfType <MenuItem>() .Single(mi => (string)mi.Header == Resources.CloudExplorerGaeVersionOpen) .Command.Execute(null); browserServiceMock.Verify(b => b.OpenBrowser(versionUrl)); }