示例#1
0
        public async Task GetModuleTwinsTest(string query, string continuationToken)
        {
            const string resultToken = "nextToken";

            var twinList = new List <TwinServiceModel>()
            {
                ModulesControllerTest.CreateTestTwin("d", "m")
            };
            var twins = new TwinServiceListModel(twinList, resultToken);

            this.devicesMock.Setup(x => x.GetModuleTwinsByQueryAsync(query, continuationToken))
            .ReturnsAsync(twins);
            this.httpContext.Request.Headers.Add(CONTINUATION_TOKEN_NAME,
                                                 new StringValues(continuationToken));

            // Act
            var moduleTwins = await this.modulesController.GetModuleTwinsAsync(query);

            // Assert
            var moduleTwin = moduleTwins.Items[0];

            Assert.Equal("d", moduleTwin.DeviceId);
            Assert.Equal("m", moduleTwin.ModuleId);
            Assert.Equal(resultToken, moduleTwins.ContinuationToken);
            Assert.Equal("v2", moduleTwin.Desired["version"]);
            Assert.Equal("v1", moduleTwin.Reported["version"]);
        }
示例#2
0
        private async Task StoreModuleTwinsInStorage(List <TwinServiceModel> moduleTwins, string deploymentId)
        {
            if (moduleTwins != null && moduleTwins.Count > 0)
            {
                TwinServiceListModel existingModuleTwins = await this.GetDeploymentImapactedModulesAsync(deploymentId);

                if (existingModuleTwins == null || (existingModuleTwins != null && existingModuleTwins.Items.Count == 0))
                {
                    foreach (var moduleTwin in moduleTwins)
                    {
                        await this.SaveModuleTwin(deploymentId, moduleTwin, null);
                    }
                }
                else
                {
                    foreach (var moduleTwin in moduleTwins)
                    {
                        var existingModuleTwin = existingModuleTwins.Items.FirstOrDefault(x => x.ModuleId == moduleTwin.ModuleId && x.DeviceId == moduleTwin.DeviceId);
                        await this.SaveModuleTwin(deploymentId, moduleTwin, existingModuleTwin?.ETag);

                        // archive exisiting Device Twin
                        var archiveModuleTwinValue = JsonConvert.SerializeObject(
                            existingModuleTwin,
                            Formatting.Indented,
                            new JsonSerializerSettings
                        {
                            NullValueHandling = NullValueHandling.Ignore,
                        });
                        await this.client.UpdateAsync(string.Format(DeploymentModuleHistoryPropertiesCollection, deploymentId, Guid.NewGuid().ToString()), $"{moduleTwin.DeviceId}-{this.RemoveSpecialCharacters(moduleTwin.ModuleId)}", archiveModuleTwinValue, null);
                    }
                }
            }
        }
示例#3
0
        private async Task StoreDevicePropertiesInStorage(List <TwinServiceModel> deviceTwins, string deploymentId)
        {
            if (deviceTwins != null)
            {
                TwinServiceListModel existingDeviceTwins = await this.GetDeploymentDevicesAsync(deploymentId);

                if (existingDeviceTwins == null || (existingDeviceTwins != null && existingDeviceTwins.Items.Count == 0))
                {
                    foreach (var deviceTwin in deviceTwins)
                    {
                        await this.SaveDeviceTwin(deploymentId, deviceTwin, null);
                    }
                }
                else
                {
                    foreach (var deviceTwin in deviceTwins)
                    {
                        var existingDeviceTwin = existingDeviceTwins.Items.FirstOrDefault(x => x.DeviceId == deviceTwin.DeviceId);
                        await this.SaveDeviceTwin(deploymentId, deviceTwin, existingDeviceTwin?.ETag);

                        // archive exisiting Device Twin
                        var archiveDeviceTwinValue = JsonConvert.SerializeObject(
                            existingDeviceTwin,
                            Formatting.Indented,
                            new JsonSerializerSettings
                        {
                            NullValueHandling = NullValueHandling.Ignore,
                        });
                        await this.client.UpdateAsync(string.Format(DeploymentHistoryPropertiesCollection, deploymentId, Guid.NewGuid().ToString()), deviceTwin.DeviceId, archiveDeviceTwinValue, null);
                    }
                }
            }
        }
 public TwinPropertiesListApiModel(TwinServiceListModel twins)
 {
     this.Items             = new List <TwinPropertiesApiModel>();
     this.ContinuationToken = twins.ContinuationToken;
     foreach (var t in twins.Items)
     {
         this.Items.Add(new TwinPropertiesApiModel(t.DesiredProperties, t.ReportedProperties,
                                                   t.DeviceId, t.ModuleId));
     }
 }
示例#5
0
        public async Task <TwinServiceListModel> GetModulesListAsync(string deploymentId, string query, bool isLatest)
        {
            TwinServiceListModel moduletwins = null;

            if (!isLatest)
            {
                moduletwins = await this.GetDeploymentImapactedModulesAsync(deploymentId);
            }
            else
            {
                moduletwins = await this.devices.GetModuleTwinsByQueryAsync(query, null);
            }

            return(moduletwins);
        }
示例#6
0
        private async Task GetModuleTwins(string query, string continuationToken, List <TwinServiceModel> twins)
        {
            TwinServiceListModel moduleTwins = null;

            moduleTwins = await this.devices.GetModuleTwinsByQueryAsync(query, null);

            if (moduleTwins != null && moduleTwins.Items.Count() > 0)
            {
                twins.AddRange(moduleTwins.Items);
                if (!string.IsNullOrWhiteSpace(moduleTwins.ContinuationToken))
                {
                    await this.GetModuleTwins(query, continuationToken, twins);
                }
            }
        }