Skip to content

Commit

Permalink
Added Edge device capability in Provisioning Service.
Browse files Browse the repository at this point in the history
  • Loading branch information
abhipsaMisra committed Jun 29, 2018
1 parent 2c9bce0 commit c93b167
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 11 deletions.
11 changes: 10 additions & 1 deletion provisioning/service/src/Config/IndividualEnrollment.cs
Expand Up @@ -141,6 +141,7 @@ public IndividualEnrollment(string registrationId, Attestation attestation)
/// <param name="createdDateTimeUtc">the <code>DateTime</code> with the date and time that the enrollment was created. This is optional and can be <code>null</code>.</param>
/// <param name="lastUpdatedDateTimeUtc">the <code>DateTime</code> with the date and time that the enrollment was updated. This is optional and can be <code>null</code>.</param>
/// <param name="eTag">the <code>string</code> with the eTag that identify the correct instance of the enrollment in the service. It cannot be <code>null</code> or empty.</param>
/// <param name="capabilities">the <see cref="DeviceCapabilities"/> that identifies the device capabilities. This is optional and can be <code>null</code>.</param>
/// <exception cref="ProvisioningServiceClientException">if the received JSON is invalid.</exception>
[JsonConstructor]
internal IndividualEnrollment(
Expand All @@ -152,7 +153,8 @@ public IndividualEnrollment(string registrationId, Attestation attestation)
ProvisioningStatus? provisioningStatus,
DateTime createdDateTimeUtc,
DateTime lastUpdatedDateTimeUtc,
string eTag)
string eTag,
DeviceCapabilities capabilities)
{
/* SRS_INDIVIDUAL_ENROLLMENT_21_003: [The constructor shall throws ProvisioningServiceClientException if one of the
provided parameters in JSON is not valid.] */
Expand All @@ -173,6 +175,7 @@ public IndividualEnrollment(string registrationId, Attestation attestation)
CreatedDateTimeUtc = createdDateTimeUtc;
LastUpdatedDateTimeUtc = lastUpdatedDateTimeUtc;
ETag = eTag;
Capabilities = capabilities;
}
catch (ArgumentException e)
{
Expand Down Expand Up @@ -313,5 +316,11 @@ public Attestation Attestation
/// </summary>
[JsonProperty(PropertyName = "etag", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string ETag { get; set; }

/// <summary>
/// Capabilities of the device
/// </summary>
[JsonProperty(PropertyName = "capabilities", DefaultValueHandling = DefaultValueHandling.Ignore)]
public DeviceCapabilities Capabilities { get; set; }
}
}
4 changes: 2 additions & 2 deletions provisioning/service/src/Contract/SDKUtils.cs
Expand Up @@ -5,7 +5,7 @@ namespace Microsoft.Azure.Devices.Provisioning.Service
{
internal class SDKUtils
{
private const string ApiVersionProvisioningPreview = "2017-11-15";
public const string ApiVersionQueryString = CustomHeaderConstants.ApiVersion + "=" + ApiVersionProvisioningPreview;
private const string ApiVersionProvisioning = "2018-04-01";
public const string ApiVersionQueryString = CustomHeaderConstants.ApiVersion + "=" + ApiVersionProvisioning;
}
}
Expand Up @@ -18,7 +18,7 @@
</PropertyGroup>

<PropertyGroup>
<Version>1.1.2</Version>
<Version>1.2.0</Version>
<Title>Microsoft Azure IoT Provisioning Service Client SDK</Title>
<Authors>Microsoft</Authors>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
Expand Down
77 changes: 71 additions & 6 deletions provisioning/service/tests/Config/IndividualEnrollmentTests.cs
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using Microsoft.Azure.Devices.Shared;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Microsoft.Azure.Devices.Provisioning.Service.Test
Expand All @@ -18,6 +19,8 @@ public class IndividualEnrollmentTests
private const string SampleLastUpdatedDateTimeUTCString = "2017-11-14T12:34:18.321Z";
private DateTime SampleLastUpdatedDateTimeUTC = new DateTime(2017, 11, 14, 12, 34, 18, 321, DateTimeKind.Utc);
private const string SampleEtag = "00000000-0000-0000-0000-00000000000";
private DeviceCapabilities SampleEdgeCapabilityTrue = new DeviceCapabilities { IotEdge = true };
private DeviceCapabilities SampleEdgeCapabilityFalse = new DeviceCapabilities { IotEdge = false };
private const string SampleEndorsementKey =
"AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj" +
"2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjY" +
Expand All @@ -42,8 +45,7 @@ public class IndividualEnrollmentTests
private X509Attestation SampleX509RootAttestation = X509Attestation.CreateFromRootCertificates(SamplePublicKeyCertificateString);
private X509Attestation SampleX509ClientAttestation = X509Attestation.CreateFromClientCertificates(SamplePublicKeyCertificateString);
private X509Attestation SampleX509CAReferenceAttestation = X509Attestation.CreateFromCAReferences(SampleCAReference);
private string SampleIndividualEnrollmentJson =
"{\n" +
private static string SampleIndividualEnrollmentJsonBody =
" \"registrationId\":\"" + SampleRegistrationId + "\",\n" +
" \"attestation\":{\n" +
" \"type\":\"x509\",\n" +
Expand Down Expand Up @@ -74,8 +76,28 @@ public class IndividualEnrollmentTests
" \"provisioningStatus\":\"" + SampleProvisioningStatus + "\",\n" +
" \"createdDateTimeUtc\": \"" + SampleCreateDateTimeUTCString + "\",\n" +
" \"lastUpdatedDateTimeUtc\": \"" + SampleLastUpdatedDateTimeUTCString + "\",\n" +
" \"etag\": \"" + SampleEtag + "\"\n" +
"}";
" \"etag\": \"" + SampleEtag + "\",\n";

private string SampleIndividualEnrollmentJsonWithoutCapabilities =
"{\n" +
SampleIndividualEnrollmentJsonBody +
"}\n";

private string SampleIndividualEnrollmentJsonWithCapabilitiesTrue =
"{\n" +
SampleIndividualEnrollmentJsonBody +
" \"capabilities\": {\n" +
" \"iotEdge\": true \n" +
" },\n" +
"}\n";

private string SampleIndividualEnrollmentJsonWithCapabilitiesFalse =
"{\n" +
SampleIndividualEnrollmentJsonBody +
" \"capabilities\": {\n" +
" \"iotEdge\": false \n" +
" },\n" +
"}\n";

/* SRS_DEVICE_ENROLLMENT_21_001: [The constructor shall store the provided parameters.] */
[TestMethod]
Expand Down Expand Up @@ -243,10 +265,52 @@ public void IndividualEnrollmentConstructorJSONThrowsOnNonEtag()
/* SRS_INDIVIDUAL_ENROLLMENT_21_004: [The constructor shall store all parameters in the JSON.] */
[TestMethod]
[TestCategory("DevService")]
public void IndividualEnrollmentConstructorJSONSucceed()
public void IndividualEnrollmentConstructorWithoutCapabilitiesJSONSucceed()
{
// arrange
IndividualEnrollment individualEnrollment = Newtonsoft.Json.JsonConvert.DeserializeObject<IndividualEnrollment>(SampleIndividualEnrollmentJsonWithoutCapabilities);

// act - assert
Assert.IsNotNull(individualEnrollment);
Assert.AreEqual(SampleRegistrationId, individualEnrollment.RegistrationId);
Assert.IsTrue(individualEnrollment.Attestation is X509Attestation);
Assert.AreEqual(SampleDeviceId, individualEnrollment.DeviceId);
Assert.AreEqual(SampleIotHubHostName, individualEnrollment.IotHubHostName);
Assert.IsNotNull(individualEnrollment.InitialTwinState);
Assert.AreEqual(SampleProvisioningStatus, individualEnrollment.ProvisioningStatus);
Assert.AreEqual(SampleCreateDateTimeUTC, individualEnrollment.CreatedDateTimeUtc);
Assert.AreEqual(SampleLastUpdatedDateTimeUTC, individualEnrollment.LastUpdatedDateTimeUtc);
Assert.AreEqual(SampleEtag, individualEnrollment.ETag);
Assert.AreEqual(null, individualEnrollment.Capabilities);
}

[TestMethod]
[TestCategory("DevService")]
public void IndividualEnrollmentConstructorWithCapabilitiesTrueJSONSucceed()
{
// arrange
IndividualEnrollment individualEnrollment = Newtonsoft.Json.JsonConvert.DeserializeObject<IndividualEnrollment>(SampleIndividualEnrollmentJsonWithCapabilitiesTrue);

// act - assert
Assert.IsNotNull(individualEnrollment);
Assert.AreEqual(SampleRegistrationId, individualEnrollment.RegistrationId);
Assert.IsTrue(individualEnrollment.Attestation is X509Attestation);
Assert.AreEqual(SampleDeviceId, individualEnrollment.DeviceId);
Assert.AreEqual(SampleIotHubHostName, individualEnrollment.IotHubHostName);
Assert.IsNotNull(individualEnrollment.InitialTwinState);
Assert.AreEqual(SampleProvisioningStatus, individualEnrollment.ProvisioningStatus);
Assert.AreEqual(SampleCreateDateTimeUTC, individualEnrollment.CreatedDateTimeUtc);
Assert.AreEqual(SampleLastUpdatedDateTimeUTC, individualEnrollment.LastUpdatedDateTimeUtc);
Assert.AreEqual(SampleEtag, individualEnrollment.ETag);
Assert.AreEqual(SampleEdgeCapabilityTrue.IotEdge, individualEnrollment.Capabilities.IotEdge);
}

[TestMethod]
[TestCategory("DevService")]
public void IndividualEnrollmentConstructorWithCapabilitiesFalseJSONSucceed()
{
// arrange
IndividualEnrollment individualEnrollment = Newtonsoft.Json.JsonConvert.DeserializeObject<IndividualEnrollment>(SampleIndividualEnrollmentJson);
IndividualEnrollment individualEnrollment = Newtonsoft.Json.JsonConvert.DeserializeObject<IndividualEnrollment>(SampleIndividualEnrollmentJsonWithCapabilitiesFalse);

// act - assert
Assert.IsNotNull(individualEnrollment);
Expand All @@ -259,6 +323,7 @@ public void IndividualEnrollmentConstructorJSONSucceed()
Assert.AreEqual(SampleCreateDateTimeUTC, individualEnrollment.CreatedDateTimeUtc);
Assert.AreEqual(SampleLastUpdatedDateTimeUTC, individualEnrollment.LastUpdatedDateTimeUtc);
Assert.AreEqual(SampleEtag, individualEnrollment.ETag);
Assert.AreEqual(SampleEdgeCapabilityFalse.IotEdge, individualEnrollment.Capabilities.IotEdge);
}

[TestMethod]
Expand Down
2 changes: 1 addition & 1 deletion versions.csv
Expand Up @@ -7,4 +7,4 @@ provisioning\transport\amqp\src\Microsoft.Azure.Devices.Provisioning.Transport.A
provisioning\transport\http\src\Microsoft.Azure.Devices.Provisioning.Transport.Http.csproj, 1.1.0
provisioning\transport\mqtt\src\Microsoft.Azure.Devices.Provisioning.Transport.Mqtt.csproj, 1.1.2
security\tpm\src\Microsoft.Azure.Devices.Provisioning.Security.Tpm.csproj, 1.1.1
provisioning\service\src\Microsoft.Azure.Devices.Provisioning.Service.csproj, 1.1.2
provisioning\service\src\Microsoft.Azure.Devices.Provisioning.Service.csproj, 1.2.0

0 comments on commit c93b167

Please sign in to comment.