public async void GetMetadata_InternalServerErrorStatusCode_ThrowsException()
        {
            // Arrange
            var httpResponseMessage = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.InternalServerError,
                Content    = new StringContent("")
            };
            var httpService = new Mock <IHttpService>();

            httpService
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);
            var       metadataClient = new MetadataClient(httpService.Object);
            Exception exception      = null;

            try
            {
                // Act
                await metadataClient.GetMetadata(It.IsAny <string>());
            }
            catch (FailedToGetResourceException e)
            {
                exception = e;
            }

            // Assert
            Assert.NotNull(exception);
        }
예제 #2
0
        public void GetCustomProjectMetadata()
        {
            var client = MetadataClient.Create();
            var value  = client.GetCustomProjectMetadata("my_project_key1");

            Assert.Equal("my_project_value1", value);
        }
        public async void MarkMetadata_ToBeDeletedMetadataModel_ThrowsException()
        {
            // Arrange
            var httpResponseMessage = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(MetadataModelDataMocks.MockToBeDeletedMetadataModelJson)
            };
            var httpService = new Mock <IHttpService>();

            httpService
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);
            var       metadataClient = new MetadataClient(httpService.Object);
            Exception exception      = null;

            try
            {
                // Act
                await metadataClient.MarkMetadata(It.IsAny <string>());
            }
            catch (ResourceAlreadyMarkedException e)
            {
                exception = e;
            }

            // Assert
            Assert.NotNull(exception);
        }
        public void Init()
        {
            var partnerClient = new PartnerClient();

            _loginResult    = partnerClient.Login(Username, Password).Result;
            _metadataClient = new MetadataClient(_loginResult.MetadataServerUrl, _loginResult.SessionId);
        }
예제 #5
0
        public void GetCustomInstanceMetadata()
        {
            var client = MetadataClient.Create();
            var value  = client.GetCustomInstanceMetadata("my_instance_key1");

            Assert.Equal("my_instance_value1", value);
        }
예제 #6
0
        private static Instance GetMetadata()
        {
            MetadataClient client   = MetadataClient.Create();
            var            instance = client.GetInstanceMetadata();

            return(instance);
        }
예제 #7
0
        public void GetMaintenanceStatus()
        {
            var client = MetadataClient.Create();
            var status = client.GetMaintenanceStatus();

            Assert.Equal(MaintenanceStatus.None, status);
        }
예제 #8
0
        public async void UnmarkMetadata_MarkedMetadataModel_NoExceptionThrown()
        {
            // Arrange
            var dependantResourceModel = new DependantResourceModel(
                ResourceTypeEnum.Metadata,
                "c9de8a5e-1ab1-431f-a759-f44d7eef4e19"
                )
            {
                PreviousState = MetadataModel.FinishedState
            };
            var httpService    = new HttpService(new HttpClient());
            var metadataClient = new MetadataClient(
                httpService
                );
            Exception exception = null;

            try
            {
                // Act
                await metadataClient.UnmarkMetadata(dependantResourceModel);
            }
            catch (Exception e)
            {
                exception = e;
            }

            // Assert
            Assert.Null(exception);
        }
예제 #9
0
        public async Task MaintenanceStatusChanged()
        {
            var client = MetadataClient.Create();

            var waitHandle = new ManualResetEventSlim(false);
            int eventCount = 0;

            client.MaintenanceStatusChanged += (s, e) =>
            {
                eventCount++;
                waitHandle.Set();
            };

            try
            {
                await _fixture.UpdateMetadataAsync("instance/maintenance-event", "MIGRATE_ON_HOST_MAINTENANCE");

                waitHandle.Wait(TimeSpan.FromSeconds(10));
                Assert.Equal(1, eventCount);
                Assert.Equal(MaintenanceStatus.Migrate, client.GetMaintenanceStatus());
            }
            finally
            {
                await _fixture.UpdateMetadataAsync("instance/maintenance-event", "NONE");
            }
        }
예제 #10
0
        public async Task InstanceMetadataChanged_HookTwice()
        {
            const string newValue = "foo";
            string       key      = _fixture.GenerateCustomKey();

            var client = MetadataClient.Create();

            var      waitHandle1 = new ManualResetEventSlim(false);
            var      waitHandle2 = new ManualResetEventSlim(false);
            int      eventCount  = 0;
            Instance instance1   = null;
            Instance instance2   = null;

            client.InstanceMetadataChanged += (s, e) =>
            {
                instance1 = e.NewMetadata;
                Interlocked.Increment(ref eventCount);
                waitHandle1.Set();
            };
            client.InstanceMetadataChanged += (s, e) =>
            {
                instance2 = e.NewMetadata;
                Interlocked.Increment(ref eventCount);
                waitHandle2.Set();
            };

            await _fixture.UpdateMetadataAsync($"instance/attributes/{key}", newValue);

            waitHandle1.Wait(TimeSpan.FromSeconds(10));
            waitHandle2.Wait(TimeSpan.FromSeconds(1));
            Assert.Equal(2, eventCount);
            // Ensure the result string is only parsed once and (indirectly) that we only performed a
            // single handing get on the server.
            Assert.Same(instance1, instance2);
        }
예제 #11
0
        public async Task ProjectMetadataChanged()
        {
            const string newValue = "foo";
            string       key      = _fixture.GenerateCustomKey();

            var client = MetadataClient.Create();

            var waitHandle = new ManualResetEventSlim(false);
            int eventCount = 0;

            client.ProjectMetadataChanged += (s, e) =>
            {
                Assert.Equal(newValue, e.NewMetadata.CommonInstanceMetadata.Items.FirstOrDefault(i => i.Key == key)?.Value);
                eventCount++;
                waitHandle.Set();
            };

            await Task.Delay(TimeSpan.FromSeconds(1));

            await _fixture.UpdateMetadataAsync($"project/attributes/{key}", newValue);

            waitHandle.Wait(TimeSpan.FromSeconds(10));
            Assert.Equal(1, eventCount);
            Assert.Equal(newValue, await client.GetCustomProjectMetadataAsync(key));
        }
예제 #12
0
        public void Test()
        {
            SearchedGame result = new MetadataClient().GetGameMetadata("Battlefield 1")
                                  .Result;

            Assert.IsTrue(true);
        }
예제 #13
0
        public void WaitForChangeTimeout()
        {
            var client            = MetadataClient.Create();
            var initialTags       = client.WaitForChange("instance/tags", timeout: TimeSpan.FromMilliseconds(1));
            var initialAttributes = client.WaitForChange("instance/attributes", timeout: TimeSpan.FromMilliseconds(1));

            // Wait for change on a value key
            var sw     = Stopwatch.StartNew();
            var result = client.WaitForChange("instance/tags", timeout: TimeSpan.FromSeconds(7));

            sw.Stop();
            Assert.Equal(initialTags.Content, result.Content);
            Assert.Equal(initialTags.ETag, result.ETag);
            Assert.NotNull(result.ETag);
            Assert.True(sw.Elapsed.TotalSeconds >= 7);

            // Wait for change on a directory key
            sw     = Stopwatch.StartNew();
            result = client.WaitForChange("instance/attributes", timeout: TimeSpan.FromSeconds(5));
            sw.Stop();
            Assert.Equal(initialAttributes.Content, result.Content);
            Assert.Equal(initialAttributes.ETag, result.ETag);
            Assert.NotNull(result.ETag);
            Assert.True(sw.Elapsed.TotalSeconds >= 5);
        }
        public async void UnmarkMetadata_InternalServerErrorStatusCode_ThrowsException()
        {
            // Arrange
            var httpResponseMessage = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.InternalServerError,
                Content    = new StringContent("Some error!")
            };
            var httpService = new Mock <IHttpService>();

            httpService
            .Setup(m => m.PutAsync(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);
            var       metadataClient = new MetadataClient(httpService.Object);
            Exception exception      = null;

            try
            {
                // Act
                await metadataClient.UnmarkMetadata(DependantResourceDataMocks.MockDependantResourceModel());
            }
            catch (FailedToUpdateResourceException e)
            {
                exception = e;
            }

            // Assert
            Assert.NotNull(exception);
        }
예제 #15
0
        public void GetAccessToken()
        {
            var client        = MetadataClient.Create();
            var tokenResponse = client.GetAccessToken();

            Assert.Equal("0123456789ABCDEF", tokenResponse.AccessToken);
            Assert.Equal(3000, tokenResponse.ExpiresInSeconds.Value);
            Assert.Equal("Bearer", tokenResponse.TokenType);
        }
예제 #16
0
        public void GetProjectMetadata()
        {
            var client  = MetadataClient.Create();
            var project = client.GetProjectMetadata();

            Assert.True(project.CommonInstanceMetadata.Items.Count >= 1);
            Assert.Equal("my_project_value1", project.CommonInstanceMetadata.Items.FirstOrDefault(i => i.Key == "my_project_key1")?.Value);
            Assert.Equal(12345ul, project.Id.Value);
            Assert.Equal("fake-project", project.Name);
        }
        public void GetInstanceMetadata()
        {
            // Snippet: GetInstanceMetadata
            MetadataClient client   = MetadataClient.Create();
            Instance       instance = client.GetInstanceMetadata();

            Console.Write(instance.Zone);
            // End snippet

            Assert.Equal(instance.Zone, "projects/12345/zones/us-central1-f");
        }
예제 #18
0
        private void simpleAction1_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            var process = MetadataClient.LoadProcess(this.ObjectSpace, "Demo");

            var Result = process.Execute(this.ObjectSpace, this.Application);

            if (Result.Success == false)
            {
                throw Result.Exception;
            }
        }
        public void GetCustomInstanceMetadata()
        {
            // Snippet: GetCustomInstanceMetadata
            MetadataClient client      = MetadataClient.Create();
            string         customValue = client.GetCustomInstanceMetadata("my_instance_key1");

            Console.WriteLine(customValue);
            // End snippet

            Assert.Equal("my_instance_value1", customValue);
        }
        public async Task WaitForChange()
        {
            const string newValue = "foo";
            string       key      = _fixture.GenerateCustomKey();

            await _fixture.UpdateMetadataAsync($"instance/attributes/{key}", "initial value");

            var task = Task.Run(async() =>
            {
                await Task.Delay(TimeSpan.FromSeconds(2));
                await _fixture.UpdateMetadataAsync($"instance/attributes/{key}", newValue);
            });

            // Snippet: WaitForChange
            MetadataClient client = MetadataClient.Create();

            // Get the original metadata and its ETag so we know when the metadata changes.
            MetadataResult initialResult = client.GetMetadata("instance/attributes");

            Console.WriteLine("Initial Metadata:");
            JObject initialMetadata = JObject.Parse(initialResult.Content);

            foreach (JProperty property in initialMetadata.Properties())
            {
                Console.WriteLine(property.Name + " = " + property.Value);
            }
            string lastETag = initialResult.ETag;

            MetadataResult changeResult;

            while (true)
            {
                // Wait in 30 second blocks until the value actually changes.
                changeResult = client.WaitForChange("instance/attributes", lastETag, TimeSpan.FromSeconds(30));
                if (changeResult.ETag != lastETag)
                {
                    Console.WriteLine("Changed Metadata:");
                    JObject currentMetadata = JObject.Parse(changeResult.Content);
                    foreach (JProperty property in currentMetadata.Properties())
                    {
                        Console.WriteLine(property.Name + " = " + property.Value);
                    }
                    break;
                }
            }
            // End snippet

            dynamic obj = JsonConvert.DeserializeObject(changeResult.Content);

            Assert.Equal(newValue, obj[key].Value);
            await task;
        }
        public void GetMaintenanceStatus()
        {
            // Snippet: GetMaintenanceStatus
            MetadataClient    client = MetadataClient.Create();
            MaintenanceStatus status = client.GetMaintenanceStatus();

            if (status == MaintenanceStatus.Migrate)
            {
                // Backup data
            }
            // End snippet

            Assert.Equal(MaintenanceStatus.None, status);
        }
        public void GetMetadata()
        {
            // Snippet: GetMetadata
            MetadataClient client = MetadataClient.Create();

            MetadataResult result          = client.GetMetadata("instance/attributes");
            JObject        initialMetadata = JObject.Parse(result.Content);

            foreach (JProperty property in initialMetadata.Properties())
            {
                Console.WriteLine(property.Name + " = " + property.Value);
            }
            // End snippet
        }
예제 #23
0
        public async void GetMetadataForProject_ValidProjectId_ReturnsMetadataModelList()
        {
            // Arrange
            var projectId      = "623be379-ed40-49f3-bdd8-416f8cd0faa6";
            var httpService    = new HttpService(new HttpClient());
            var metadataClient = new MetadataClient(
                httpService
                );

            // Act
            var result = await metadataClient.GetMetadataForProject(projectId);

            // Assert
            Assert.NotEmpty(result);
        }
예제 #24
0
        public async void MarkMetadata_UnmarkedMetadataModel_ReturnsDependantResourceModel()
        {
            // Arrange
            var metadataId     = "45db3205-83be-42a1-af14-6a03df9d9536";
            var httpService    = new HttpService(new HttpClient());
            var metadataClient = new MetadataClient(
                httpService
                );

            // Act
            var result = await metadataClient.MarkMetadata(metadataId);

            // Assert
            Assert.NotNull(result);
        }
예제 #25
0
        public async void GetMetadata_ValidMetadataId_ReturnsMetadataModel()
        {
            // Arrange
            var metadataId     = "4439722e-a6d0-4f7a-9d33-0cc5a2a66da0";
            var httpService    = new HttpService(new HttpClient());
            var metadataClient = new MetadataClient(
                httpService
                );

            // Act
            var result = await metadataClient.GetMetadata(metadataId);

            // Assert
            Assert.NotNull(result);
        }
예제 #26
0
        public void WaitForChange_Validations()
        {
            var client = MetadataClient.Create();

            Assert.Throws <ArgumentException>(() => client.WaitForChange("a b"));
            Assert.Throws <ArgumentException>(() => client.WaitForChange("a?b"));
            Assert.Throws <ArgumentException>(() => client.WaitForChange("http://www.google.com"));
            Assert.Throws <ArgumentException>(() => client.WaitForChange("instance", lastETag: "bad-etag"));
            Assert.Throws <ArgumentException>(() => client.WaitForChange("instance", timeout: TimeSpan.FromSeconds(-1)));

            Assert.ThrowsAsync <ArgumentException>(() => client.WaitForChangeAsync("a b"));
            Assert.ThrowsAsync <ArgumentException>(() => client.WaitForChangeAsync("a?b"));
            Assert.ThrowsAsync <ArgumentException>(() => client.WaitForChangeAsync("http://www.google.com"));
            Assert.ThrowsAsync <ArgumentException>(() => client.WaitForChangeAsync("instance", lastETag: "bad-etag"));
            Assert.ThrowsAsync <ArgumentException>(() => client.WaitForChangeAsync("instance", timeout: TimeSpan.FromSeconds(-1)));
        }
예제 #27
0
        public SampleAppModule()
        {
            InitializeComponent();


            BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction;

            string ModelName = System.Configuration.ConfigurationManager.AppSettings["ExtendedModelName"];

            MetadataClient = new MetadataClient(@"Integrated Security=SSPI;Pooling=false;Data Source=(localdb)\mssqllocaldb;Initial Catalog=XpoExtender", ModelName);
            types          = this.MetadataClient.GetDynamicTypes();
            this.AdditionalExportedTypes.AddRange(types);

            //TODO add process example
            //this.AdditionalExportedTypes.Add(typeof(Process));
        }
예제 #28
0
        public void GetCustomProjectMetadata_Validations()
        {
            var client = MetadataClient.Create();

            Assert.Throws <ArgumentException>(() => client.GetCustomProjectMetadata(""));
            Assert.Throws <ArgumentException>(() => client.GetCustomProjectMetadata("a b"));
            Assert.Throws <ArgumentException>(() => client.GetCustomProjectMetadata("a^b"));
            Assert.Throws <ArgumentException>(() => client.GetCustomProjectMetadata(
                                                  "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"));

            Assert.ThrowsAsync <ArgumentException>(() => client.GetCustomProjectMetadataAsync(""));
            Assert.ThrowsAsync <ArgumentException>(() => client.GetCustomProjectMetadataAsync("a b"));
            Assert.ThrowsAsync <ArgumentException>(() => client.GetCustomProjectMetadataAsync("a^b"));
            Assert.ThrowsAsync <ArgumentException>(() => client.GetCustomProjectMetadataAsync(
                                                       "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"));
        }
예제 #29
0
        public async Task WaitForChange()
        {
            const string newValue = "foo";
            string       key      = _fixture.GenerateCustomKey();

            await _fixture.UpdateMetadataAsync($"instance/attributes/{key}", "initial value");

            var task = Task.Run(async() =>
            {
                await Task.Delay(TimeSpan.FromSeconds(2));
                await _fixture.UpdateMetadataAsync($"instance/attributes/{key}", newValue);
            });

            // TODO: This pattern to get the original ETag seems messy. Maybe add something to get an ETag.

            // Snippet: WaitForChange
            MetadataClient client = MetadataClient.Create();

            // Get the original ETag so we know when the metadata changes.
            string lastETag = client.WaitForChange("instance/attributes", timeout: TimeSpan.FromMilliseconds(1)).ETag;

            WaitForChangeResult result;

            while (true)
            {
                // Wait in 30 second blocks until the value actually changes.
                result = client.WaitForChange("instance/attributes", lastETag, TimeSpan.FromSeconds(30));
                if (result.ETag != lastETag)
                {
                    JObject currentCustomMetadata = JObject.Parse(result.Content);
                    foreach (JProperty customMetadata in currentCustomMetadata.Properties())
                    {
                        Console.WriteLine(customMetadata.Name + " = " + customMetadata.Value);
                    }
                    break;
                }
            }
            // End snippet

            dynamic obj = JsonConvert.DeserializeObject(result.Content);

            Assert.Equal(newValue, obj[key].Value);
            await task;
        }
        public async void GetMetadataForProject_OkStatusCode_ReturnsMarkSessionModelList()
        {
            // Arrange
            var httpResponseMessage = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(MarkSessionModelDataMocks.MockMarkSessionModelListJson)
            };
            var httpService = new Mock <IHttpService>();

            httpService
            .Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync(httpResponseMessage);
            var metadataClient = new MetadataClient(httpService.Object);

            // Act
            var result = await metadataClient.GetMetadataForProject(It.IsAny <string>());

            // Assert
            Assert.NotEmpty(result);
        }