Ejemplo n.º 1
0
        /// <summary>
        /// Restart module with the given name.
        /// </summary>
        /// <param name="moduleName"> Module name. </param>
        /// <param name="ct"> Cancellation token. </param>
        public async Task <MethodResultModel> RestartModule(
            string moduleName,
            CancellationToken ct)
        {
            var payload = new Dictionary <string, string> {
                { "schemaVersion", "1.0" },
                { "id", moduleName },
            };

            var parameters = new MethodParameterModel {
                Name        = "RestartModule",
                JsonPayload = _serializer.SerializeToString(payload)
            };

            var moduleRestartResponse = await TestHelper.CallMethodAsync(
                _iotHubClient,
                _iotHubPublisherDeviceName,
                "$edgeAgent",
                parameters,
                _context,
                ct
                ).ConfigureAwait(false);

            return(moduleRestartResponse);
        }
Ejemplo n.º 2
0
        /// <inheritdoc/>
        public async Task <MethodResultModel> CallMethodAsync(string deviceId, string moduleId,
                                                              MethodParameterModel parameters, CancellationToken ct)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException(nameof(deviceId));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }
            if (string.IsNullOrEmpty(parameters.Name))
            {
                throw new ArgumentNullException(nameof(parameters.Name));
            }
            var request = NewRequest(
                $"/twins/{ToResourceId(deviceId, moduleId)}/methods");

            request.SetContent(new {
                methodName = parameters.Name,
                // TODO: Add timeouts...
                // responseTimeoutInSeconds = ...
                payload = JToken.Parse(parameters.JsonPayload)
            });
            var response = await _httpClient.PostAsync(request, ct);

            response.Validate();
            dynamic result = JToken.Parse(response.GetContentAsString());

            return(new MethodResultModel {
                JsonPayload = ((JToken)result.payload).ToString(),
                Status = result.status
            });
        }
Ejemplo n.º 3
0
        /// <inheritdoc/>
        public async Task <MethodResultModel> CallMethodAsync(string deviceId, string moduleId,
                                                              MethodParameterModel parameters, CancellationToken ct)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException(nameof(deviceId));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }
            if (string.IsNullOrEmpty(parameters.Name))
            {
                throw new ArgumentNullException(nameof(parameters.Name));
            }
            var request = NewRequest(
                $"/twins/{ToResourceId(deviceId, moduleId)}/methods");

            _serializer.SerializeToRequest(request, new {
                methodName = parameters.Name,
                // TODO: Add timeouts...
                // responseTimeoutInSeconds = ...
                payload = _serializer.Parse(parameters.JsonPayload)
            });
            var response = await _httpClient.PostAsync(request, ct);

            response.Validate();
            var result = _serializer.ParseResponse(response);

            return(new MethodResultModel {
                JsonPayload = _serializer.SerializeToString(result["payload"]),
                Status = (int)result["status"]
            });
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Perform direct method call.
 /// </summary>
 /// <param name="parameters"> Direct method parameters. </param>
 /// <param name="ct"> Cancellation token. </param>
 /// <returns></returns>
 public async Task <MethodResultModel> CallMethodAsync(
     MethodParameterModel parameters,
     CancellationToken ct
     )
 {
     return(await TestHelper.CallMethodAsync(
                _iotHubClient,
                _iotHubPublisherDeviceName,
                _iotHubPublisherModuleName,
                parameters,
                _context,
                ct
                ).ConfigureAwait(false));
 }
Ejemplo n.º 5
0
 /// <inheritdoc/>
 public async Task <MethodResultModel> CallMethodAsync(string deviceId, string moduleId,
                                                       MethodParameterModel parameters, CancellationToken ct)
 {
     try {
         var methodInfo = new CloudToDeviceMethod(parameters.Name);
         methodInfo.SetPayloadJson(parameters.JsonPayload);
         var result = await(string.IsNullOrEmpty(moduleId) ?
                            _client.InvokeDeviceMethodAsync(deviceId, methodInfo, ct) :
                            _client.InvokeDeviceMethodAsync(deviceId, moduleId, methodInfo, ct));
         return(new MethodResultModel {
             JsonPayload = result.GetPayloadAsJson(),
             Status = result.Status
         });
     }
     catch (Exception e) {
         _logger.Verbose(e, "Call method failed ");
         throw e.Rethrow();
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Call a direct method
 /// </summary>
 /// <param name="serviceClient">Device service client</param>
 /// <param name="deviceId">Device Id</param>
 /// <param name="moduleId">Module Id</param>
 /// <param name="parameters">Method parameter </param>
 /// <param name="context">Shared Context for E2E testing Industrial IoT Platform</param>
 /// <param name="ct">Cancellation token</param>
 public static async Task <MethodResultModel> CallMethodAsync(ServiceClient serviceClient, string deviceId, string moduleId,
                                                              MethodParameterModel parameters, IIoTPlatformTestContext context, CancellationToken ct)
 {
     try {
         var methodInfo = new CloudToDeviceMethod(parameters.Name);
         methodInfo.SetPayloadJson(parameters.JsonPayload);
         var result = await(string.IsNullOrEmpty(moduleId) ?
                            serviceClient.InvokeDeviceMethodAsync(deviceId, methodInfo, ct) :
                            serviceClient.InvokeDeviceMethodAsync(deviceId, moduleId, methodInfo, ct));
         return(new MethodResultModel {
             JsonPayload = result.GetPayloadAsJson(),
             Status = result.Status
         });
     }
     catch (Exception e) {
         PrettyPrintException(e, context.OutputHelper);
         return(null);
     }
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Call device method on twin
 /// </summary>
 /// <param name="service"></param>
 /// <param name="deviceId"></param>
 /// <param name="parameters"></param>
 /// <returns></returns>
 public static Task <MethodResultModel> CallMethodAsync(this IIoTHubTwinServices service,
                                                        string deviceId, MethodParameterModel parameters) =>
 service.CallMethodAsync(deviceId, null, parameters);
Ejemplo n.º 8
0
 /// <summary>
 /// Call device method on twin
 /// </summary>
 /// <param name="service"></param>
 /// <param name="deviceId"></param>
 /// <param name="parameters"></param>
 /// <param name="ct"></param>
 /// <returns></returns>
 public static Task <MethodResultModel> CallMethodAsync(this IIoTHubTwinServices service,
                                                        string deviceId, MethodParameterModel parameters, CancellationToken ct = default)
 {
     return(service.CallMethodAsync(deviceId, null, parameters, ct));
 }
 /// <inheritdoc/>
 public Task <MethodResultModel> CallMethodAsync(string deviceId, string moduleId,
                                                 MethodParameterModel parameters)
 {
     throw new NotSupportedException();
 }