use of com.microsoft.azure.sdk.iot.service.Device in project azure-iot-sdk-java by Azure.
the class DigitalTwinClientTests method invokeRootLevelCommand.
@Test
@StandardTierHubOnlyTest
public void invokeRootLevelCommand() throws IOException {
// arrange
String commandName = "getMaxMinReport";
String commandInput = "\"" + ZonedDateTime.now(ZoneOffset.UTC).minusMinutes(5).format(DateTimeFormatter.ISO_DATE_TIME) + "\"";
String jsonStringInput = "{\"prop\":\"value\"}";
DigitalTwinInvokeCommandRequestOptions options = new DigitalTwinInvokeCommandRequestOptions();
options.setConnectTimeoutInSeconds(15);
options.setResponseTimeoutInSeconds(15);
// setup device callback
Integer deviceSuccessResponseStatus = 200;
Integer deviceFailureResponseStatus = 500;
// Device method callback
DeviceMethodCallback deviceMethodCallback = (methodName, methodData, context) -> {
String jsonRequest = new String((byte[]) methodData, StandardCharsets.UTF_8);
if (methodName.equalsIgnoreCase(commandName)) {
return new DeviceMethodData(deviceSuccessResponseStatus, jsonRequest);
} else {
return new DeviceMethodData(deviceFailureResponseStatus, jsonRequest);
}
};
// IotHub event callback
IotHubEventCallback iotHubEventCallback = (responseStatus, callbackContext) -> {
};
deviceClient.subscribeToDeviceMethod(deviceMethodCallback, commandName, iotHubEventCallback, commandName);
// act
DigitalTwinCommandResponse responseWithNoPayload = this.digitalTwinClient.invokeCommand(deviceId, commandName, null);
DigitalTwinCommandResponse responseWithJsonStringPayload = this.digitalTwinClient.invokeCommand(deviceId, commandName, jsonStringInput);
DigitalTwinCommandResponse responseWithDatePayload = this.digitalTwinClient.invokeCommand(deviceId, commandName, commandInput);
ServiceResponseWithHeaders<DigitalTwinCommandResponse, DigitalTwinInvokeCommandHeaders> datePayloadResponseWithHeaders = this.digitalTwinClient.invokeCommandWithResponse(deviceId, commandName, commandInput, options);
// assert
assertEquals(deviceSuccessResponseStatus, responseWithNoPayload.getStatus());
assertEquals("\"\"", responseWithNoPayload.getPayload());
assertEquals(deviceSuccessResponseStatus, responseWithJsonStringPayload.getStatus());
assertEquals(jsonStringInput, responseWithJsonStringPayload.getPayload());
assertEquals(deviceSuccessResponseStatus, responseWithDatePayload.getStatus());
assertEquals(commandInput, responseWithDatePayload.getPayload());
assertEquals(deviceSuccessResponseStatus, datePayloadResponseWithHeaders.body().getStatus());
assertEquals(commandInput, datePayloadResponseWithHeaders.body().getPayload());
}
use of com.microsoft.azure.sdk.iot.service.Device in project azure-iot-sdk-java by Azure.
the class DigitalTwinClientTests method createDeviceClient.
private DeviceClient createDeviceClient(IotHubClientProtocol protocol, String modelId) throws IOException, IotHubException, URISyntaxException {
ClientOptions options = new ClientOptions();
options.setModelId(modelId);
this.deviceId = DEVICE_ID_PREFIX.concat(UUID.randomUUID().toString());
Device device = Device.createDevice(deviceId, AuthenticationType.SAS);
Device registeredDevice = registryManager.addDevice(device);
String deviceConnectionString = registryManager.getDeviceConnectionString(registeredDevice);
return new DeviceClient(deviceConnectionString, protocol, options);
}
use of com.microsoft.azure.sdk.iot.service.Device in project azure-iot-sdk-java by Azure.
the class MultiplexingClientTests method registrationsUnwindForClientOfDifferentHostName.
@Test
public void registrationsUnwindForClientOfDifferentHostName() throws Exception {
Device nonMultiplexedDevice = Tools.getTestDevice(iotHubConnectionString, testInstance.protocol, AuthenticationType.SAS, false).getDevice();
String deviceConnectionString = registryManager.getDeviceConnectionString(nonMultiplexedDevice);
// intentionally change the hostname of the device to simulate registering a device with a different hostname
// to a multiplexing client. It shouldn't matter that the hostname itself isn't tied to an actual IoT Hub since
// no network requests should be made before this hostname validation.
String actualHostName = IotHubConnectionString.createConnectionString(iotHubConnectionString).getHostName();
deviceConnectionString = deviceConnectionString.replace(actualHostName, "some-fake-host-name.azure-devices.net");
DeviceClient deviceClientWithDifferentHostName = new DeviceClient(deviceConnectionString, testInstance.protocol);
registrationsUnwindForUnsupportedOperationExceptions(deviceClientWithDifferentHostName);
}
use of com.microsoft.azure.sdk.iot.service.Device in project azure-iot-sdk-java by Azure.
the class MultiplexingClientTests method disableDeviceBeforeOpen.
// If you register a disabled device to a multiplexed connection that hasn't opened yet, the open call should succeed
// but the disabled device's session should drop shortly afterwards and the other devices on the multiplexed connection
// should be unaffected.
@ContinuousIntegrationTest
@Test
public void disableDeviceBeforeOpen() throws Exception {
testInstance.setup(DEVICE_MULTIPLEX_COUNT);
String deviceIdToDisable = testInstance.deviceIdentityArray.get(0).getDeviceId();
ConnectionStatusChangeTracker multiplexedConnectionStatusChangeTracker = new ConnectionStatusChangeTracker();
testInstance.multiplexingClient.registerConnectionStatusChangeCallback(multiplexedConnectionStatusChangeTracker, null);
ConnectionStatusChangeTracker[] connectionStatusChangeTrackers = new ConnectionStatusChangeTracker[DEVICE_MULTIPLEX_COUNT];
for (int i = 0; i < DEVICE_MULTIPLEX_COUNT; i++) {
connectionStatusChangeTrackers[i] = new ConnectionStatusChangeTracker();
testInstance.deviceClientArray.get(i).registerConnectionStatusChangeCallback(connectionStatusChangeTrackers[i], null);
}
// Disable a device that will be on the multiplexed connection when the multiplexed connection hasn't opened yet
Device deviceToDisable = registryManager.getDevice(deviceIdToDisable);
deviceToDisable.setStatus(DeviceStatus.Disabled);
registryManager.updateDevice(deviceToDisable);
try {
testInstance.multiplexingClient.open();
// verify that the disabled device eventually loses its device session
long startTime = System.currentTimeMillis();
while (!connectionStatusChangeTrackers[0].wentDisconnectedRetrying) {
Thread.sleep(200);
if (System.currentTimeMillis() - startTime > FAULT_INJECTION_TIMEOUT_MILLIS) {
fail("Timed out waiting for the disabled device's client to report DISCONNECTED_RETRYING");
}
}
// Verify that the other devices on the multiplexed connection were unaffected
for (int i = 1; i < DEVICE_MULTIPLEX_COUNT; i++) {
assertTrue(connectionStatusChangeTrackers[i].isOpen);
}
// Verify that the multiplexed connection itself was unaffected
assertFalse(multiplexedConnectionStatusChangeTracker.wentDisconnectedRetrying);
assertTrue(multiplexedConnectionStatusChangeTracker.isOpen);
// Verify that the other devices can still send telemetry
testSendingMessagesFromMultiplexedClients(testInstance.deviceClientArray.subList(1, DEVICE_MULTIPLEX_COUNT));
testInstance.multiplexingClient.close();
} finally {
// re enable the device in case it gets recycled
deviceToDisable.setStatus(DeviceStatus.Enabled);
registryManager.updateDevice(deviceToDisable);
}
}
use of com.microsoft.azure.sdk.iot.service.Device in project azure-iot-sdk-java by Azure.
the class MultiplexingClientTests method registrationsUnwindForDifferentProtocolClient.
@Test
public void registrationsUnwindForDifferentProtocolClient() throws Exception {
// Protocol for the new client is AMQPS if the test parameters are for AMQPS_WS, and vice versa. MultiplexingClient
// should throw an exception since this new client's protocol doesn't match, even though both AMQPS and AMQPS_WS are valid
// protocols
IotHubClientProtocol protocol = testInstance.protocol == IotHubClientProtocol.AMQPS ? IotHubClientProtocol.AMQPS_WS : IotHubClientProtocol.AMQPS;
Device newDevice = Tools.getTestDevice(iotHubConnectionString, protocol, AuthenticationType.SAS, false).getDevice();
String deviceConnectionString = registryManager.getDeviceConnectionString(newDevice);
DeviceClient differentProtocolDeviceClient = new DeviceClient(deviceConnectionString, protocol);
registrationsUnwindForUnsupportedOperationExceptions(differentProtocolDeviceClient);
}
Aggregations