Exemplo n.º 1
0
 /// <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);
        }
Exemplo n.º 4
0
        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));
        }