Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -223,41 +223,27 @@ public void registerDevice(ProvisioningDeviceClientTransportProtocol protocol, S

try
{
final CountDownLatch registrationLatch = new CountDownLatch(1);
AtomicReference<ProvisioningDeviceClientRegistrationResult> registrationResultReference = new AtomicReference<>();
AtomicReference<Exception> registrationExceptionReference = new AtomicReference<>();
provisioningDeviceClient.registerDevice(
(provisioningDeviceClientRegistrationResult, e, context) ->
{
registrationResultReference.set(provisioningDeviceClientRegistrationResult);
registrationExceptionReference.set(e);
registrationLatch.countDown();
},
null);

// Wait until registration finishes or for a max amount of time
boolean timedOut = !registrationLatch.await(MAX_TIME_TO_WAIT_FOR_REGISTRATION_SECONDS, TimeUnit.SECONDS);
if (timedOut)
ProvisioningDeviceClientRegistrationResult registrationResult;
try
{
fail("Timed out waiting for device registration to complete.");
registrationResult = provisioningDeviceClient.registerDeviceSync();
}

ProvisioningDeviceClientRegistrationResult registrationResult = registrationResultReference.get();
Exception registrationException = registrationExceptionReference.get();

if (registrationException != null)
catch (Exception e)
{
String errorContext = "";
errorContext += " Status=" + registrationResult.getStatus();
errorContext += " Substatus=" + registrationResult.getSubstatus();
if (registrationException instanceof ProvisioningDeviceClientException)
String errorContext = "Provisioning threw an exception.";
if (e instanceof ProvisioningDeviceClientException)
{
errorContext += " Error code=" + ((ProvisioningDeviceHubException) registrationException).getErrorCode();
errorContext += " Error code=" + ((ProvisioningDeviceHubException) e).getErrorCode();
}

// While this would normally throw an assertion failed exception, those exceptions do not allow for nesting
// of exception causes. The invalid server cert tests need to be able to check that inner exception, though.
throw new Exception("Registration finished with exception." + errorContext, registrationException);
throw new Exception("Registration finished with exception." + errorContext, e);
}

if (registrationResult.getProvisioningDeviceClientStatus() != PROVISIONING_DEVICE_STATUS_ASSIGNED)
{
fail("Provisioning finished with unsuccessful state. Status=" + registrationResult.getStatus() + " Substatus=" + registrationResult.getSubstatus());
}

Assert.assertEquals(CorrelationDetailsLoggingAssert.buildExceptionMessageDpsIndividualOrGroup("Unexpected status", Tools.getHostName(provisioningServiceConnectionString), testInstance.groupId, testInstance.registrationId), PROVISIONING_DEVICE_STATUS_ASSIGNED, registrationResult.getProvisioningDeviceClientStatus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.microsoft.azure.sdk.iot.provisioning.service.configs.IndividualEnrollment;
import com.microsoft.azure.sdk.iot.provisioning.service.configs.TpmAttestation;
import com.microsoft.azure.sdk.iot.provisioning.service.exceptions.ProvisioningServiceClientException;
import junit.framework.AssertionFailedError;
import lombok.extern.slf4j.Slf4j;
import org.junit.Ignore;
import org.junit.Test;
Expand All @@ -28,6 +29,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;

import static com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED;
import static com.microsoft.azure.sdk.iot.provisioning.service.configs.AttestationMechanismType.TPM;
import static junit.framework.TestCase.*;
import static org.apache.commons.codec.binary.Base64.encodeBase64;
Expand Down Expand Up @@ -67,46 +69,25 @@ public void provisioningTpmFlow() throws SecurityProviderException, Provisioning
ProvisioningDeviceClientTransportProtocol.AMQPS,
securityProvider);

final CountDownLatch registrationLatch = new CountDownLatch(1);
AtomicReference<ProvisioningDeviceClientRegistrationResult> registrationResultReference = new AtomicReference<>();
AtomicReference<Exception> registrationExceptionReference = new AtomicReference<>();
provisioningDeviceClient.registerDevice(
(provisioningDeviceClientRegistrationResult, e, context) ->
{
log.debug("Provisioning registration callback fired with result {}", provisioningDeviceClientRegistrationResult.getProvisioningDeviceClientStatus());

registrationResultReference.set(provisioningDeviceClientRegistrationResult);
if (e != null)
{
registrationExceptionReference.set(e);
}

registrationLatch.countDown();
},
null);

boolean timedOut = !registrationLatch.await(REGISTRATION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
if (timedOut)
ProvisioningDeviceClientRegistrationResult registrationResult;
try
{
fail("Timed out waiting for device registration to complete.");
registrationResult = provisioningDeviceClient.registerDeviceSync();
}

provisioningDeviceClient.close();

ProvisioningDeviceClientRegistrationResult registrationResult = registrationResultReference.get();
Exception registrationException = registrationExceptionReference.get();
log.info("Registration completed with status {}", registrationResult.getStatus());

if (registrationException != null)
catch (Exception e)
{
String errorContext = "";
errorContext += " Status=" + registrationResult.getStatus();
errorContext += " Substatus=" + registrationResult.getSubstatus();
if (registrationException instanceof ProvisioningDeviceClientException)
String errorContext = "Provisioning threw an exception.";
if (e instanceof ProvisioningDeviceClientException)
{
errorContext += " Error code=" + ((ProvisioningDeviceHubException) registrationException).getErrorCode();
errorContext += " Error code=" + ((ProvisioningDeviceHubException) e).getErrorCode();
}
fail("Registration finished with exception." + errorContext);

throw new AssertionFailedError("Registration finished with exception." + errorContext);
}

if (registrationResult.getProvisioningDeviceClientStatus() != PROVISIONING_DEVICE_STATUS_ASSIGNED)
{
fail("Provisioning finished with unsuccessful state. Status=" + registrationResult.getStatus() + " Substatus=" + registrationResult.getSubstatus());
}

assertEquals("Registration completed, but not successfully", registrationResult.getProvisioningDeviceClientStatus(), ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ public enum StatusCode {
private static final ProvisioningDeviceClientTransportProtocol provisioningProtocol = ProvisioningDeviceClientTransportProtocol.MQTT;
private static final IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;

private static final int MAX_TIME_TO_WAIT_FOR_REGISTRATION = 1000; // in milli seconds

private static final Random random = new Random();
private static final Gson gson = new Gson();
private static DeviceClient deviceClient;
Expand All @@ -97,9 +95,8 @@ public enum StatusCode {
// HashMap to hold the max temperature since last reboot, for each "Thermostat" component.
private static final Map<String, Double> maxTemperature = new HashMap<>();

public static void main(String[] args) throws IOException, URISyntaxException, ProvisioningDeviceClientException, InterruptedException, IotHubClientException, TimeoutException
public static void main(String[] args) throws Exception
{

// This sample follows the following workflow:
// -> Initialize device client instance.
// -> Set handler to receive "reboot" command - root interface.
Expand Down Expand Up @@ -225,7 +222,7 @@ private static boolean validateArgsForDpsFlow()
&& (deviceSymmetricKey == null || deviceSymmetricKey.isEmpty()));
}

private static void initializeAndProvisionDevice() throws ProvisioningDeviceClientException, IOException, URISyntaxException, InterruptedException, IotHubClientException
private static void initializeAndProvisionDevice() throws Exception
{
SecurityProviderSymmetricKey securityClientSymmetricKey = new SecurityProviderSymmetricKey(deviceSymmetricKey.getBytes(StandardCharsets.UTF_8), registrationId);
ProvisioningDeviceClient provisioningDeviceClient;
Expand All @@ -235,34 +232,7 @@ private static void initializeAndProvisionDevice() throws ProvisioningDeviceClie
AdditionalData additionalData = new AdditionalData();
additionalData.setProvisioningPayload(com.microsoft.azure.sdk.iot.provisioning.device.plugandplay.PnpHelper.createDpsPayload(MODEL_ID));

final CountDownLatch registrationLatch = new CountDownLatch(1);
AtomicReference<ProvisioningDeviceClientRegistrationResult> registrationResultReference = new AtomicReference<>();
AtomicReference<Exception> registrationExceptionReference = new AtomicReference<>();
provisioningDeviceClient.registerDevice(
(provisioningDeviceClientRegistrationResult, e, context) ->
{
registrationResultReference.set(provisioningDeviceClientRegistrationResult);
registrationExceptionReference.set(e);
registrationLatch.countDown();
},
null,
additionalData);

System.out.println("Waiting for Provisioning Service to register");
// Time out after 1 minute of waiting. Typically, this operation only takes a few seconds.
boolean timedOut = !registrationLatch.await(1, TimeUnit.MINUTES);
if (timedOut)
{
throw new IotHubClientException(IotHubStatusCode.DEVICE_OPERATION_TIMED_OUT, "Timed out waiting for provisioning to finish");
}

ProvisioningDeviceClientRegistrationResult registrationResult = registrationResultReference.get();
Exception registrationException = registrationExceptionReference.get();

if (registrationException != null)
{
throw new IotHubClientException(IotHubStatusCode.ERROR, "Provisioning failed: " + registrationResult.getStatus());
}
ProvisioningDeviceClientRegistrationResult registrationResult = provisioningDeviceClient.registerDeviceSync(additionalData);

ClientOptions options = ClientOptions.builder().modelId(MODEL_ID).build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ public enum StatusCode {
private static final String registrationId = System.getenv("IOTHUB_DEVICE_DPS_DEVICE_ID");

private static final ProvisioningDeviceClientTransportProtocol provisioningProtocol = ProvisioningDeviceClientTransportProtocol.MQTT;
private static final int MAX_TIME_TO_WAIT_FOR_REGISTRATION = 1000; // in milli seconds

// Plug and play features are available over MQTT, MQTT_WS, AMQPS, and AMQPS_WS.
private static final IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
Expand All @@ -87,33 +86,8 @@ public enum StatusCode {
private static double maxTemperature = 0.0d;
private static boolean temperatureReset = true;

static class ProvisioningStatus
public static void main(String[] args) throws Exception
{
ProvisioningDeviceClientRegistrationResult provisioningDeviceClientRegistrationInfoClient = new ProvisioningDeviceClientRegistrationResult();
Exception exception;
}

static class ProvisioningDeviceClientRegistrationCallbackImpl implements ProvisioningDeviceClientRegistrationCallback
{
@Override
public void run(ProvisioningDeviceClientRegistrationResult provisioningDeviceClientRegistrationResult, Exception exception, Object context)
{
if (context instanceof ProvisioningStatus)
{
ProvisioningStatus status = (ProvisioningStatus) context;
status.provisioningDeviceClientRegistrationInfoClient = provisioningDeviceClientRegistrationResult;
status.exception = exception;
}
else
{
System.out.println("Received unknown context");
}
}
}

public static void main(String[] args) throws URISyntaxException, IOException, ProvisioningDeviceClientException, InterruptedException, IotHubClientException, TimeoutException
{

// This sample follows the following workflow:
// -> Initialize device client instance.
// -> Set handler to receive "targetTemperature" updates, and send the received update over reported property.
Expand Down Expand Up @@ -216,7 +190,7 @@ public void run() {
}).start();
}

private static void initializeAndProvisionDevice() throws ProvisioningDeviceClientException, IOException, URISyntaxException, InterruptedException, IotHubClientException
private static void initializeAndProvisionDevice() throws Exception
{
SecurityProviderSymmetricKey securityClientSymmetricKey = new SecurityProviderSymmetricKey(deviceSymmetricKey.getBytes(StandardCharsets.UTF_8), registrationId);
ProvisioningDeviceClient provisioningDeviceClient;
Expand All @@ -226,34 +200,7 @@ private static void initializeAndProvisionDevice() throws ProvisioningDeviceClie
AdditionalData additionalData = new AdditionalData();
additionalData.setProvisioningPayload(String.format("{\"modelId\": \"%s\"}", MODEL_ID));

final CountDownLatch registrationLatch = new CountDownLatch(1);
AtomicReference<ProvisioningDeviceClientRegistrationResult> registrationResultReference = new AtomicReference<>();
AtomicReference<Exception> registrationExceptionReference = new AtomicReference<>();
provisioningDeviceClient.registerDevice(
(provisioningDeviceClientRegistrationResult, e, context) ->
{
registrationResultReference.set(provisioningDeviceClientRegistrationResult);
registrationExceptionReference.set(e);
registrationLatch.countDown();
},
null,
additionalData);

System.out.println("Waiting for Provisioning Service to register");
// Time out after 1 minute of waiting. Typically, this operation only takes a few seconds.
boolean timedOut = !registrationLatch.await(1, TimeUnit.MINUTES);
if (timedOut)
{
throw new IotHubClientException(IotHubStatusCode.DEVICE_OPERATION_TIMED_OUT, "Timed out waiting for provisioning to finish");
}

ProvisioningDeviceClientRegistrationResult registrationResult = registrationResultReference.get();
Exception registrationException = registrationExceptionReference.get();

if (registrationException != null)
{
throw new IotHubClientException(IotHubStatusCode.ERROR, "Provisioning failed: " + registrationResult.getStatus());
}
ProvisioningDeviceClientRegistrationResult registrationResult = provisioningDeviceClient.registerDeviceSync(additionalData);

ClientOptions options = ClientOptions.builder().modelId(MODEL_ID).build();

Expand Down
Loading