Skip to content

Commit

Permalink
feat(client-iotdeviceadvisor): AWS IoT Core Device Advisor now suppor…
Browse files Browse the repository at this point in the history
…ts MQTT over WebSocket. With this update, customers can run all three test suites of AWS IoT Core Device Advisor - qualification, custom, and long duration tests - using Signature Version 4 for MQTT over WebSocket.
  • Loading branch information
awstools committed Apr 27, 2023
1 parent d7edbd5 commit 8e370f2
Show file tree
Hide file tree
Showing 9 changed files with 580 additions and 261 deletions.
Expand Up @@ -47,13 +47,14 @@ export interface CreateSuiteDefinitionCommandOutput extends CreateSuiteDefinitio
* { // DeviceUnderTest
* thingArn: "STRING_VALUE",
* certificateArn: "STRING_VALUE",
* deviceRoleArn: "STRING_VALUE",
* },
* ],
* intendedForQualification: true || false,
* isLongDurationTest: true || false,
* rootGroup: "STRING_VALUE", // required
* devicePermissionRoleArn: "STRING_VALUE", // required
* protocol: "MqttV3_1_1" || "MqttV5",
* protocol: "MqttV3_1_1" || "MqttV5" || "MqttV3_1_1_OverWebSocket" || "MqttV5_OverWebSocket",
* },
* tags: { // TagMap
* "<keys>": "STRING_VALUE",
Expand Down
Expand Up @@ -42,6 +42,8 @@ export interface GetEndpointCommandOutput extends GetEndpointResponse, __Metadat
* const input = { // GetEndpointRequest
* thingArn: "STRING_VALUE",
* certificateArn: "STRING_VALUE",
* deviceRoleArn: "STRING_VALUE",
* authenticationMethod: "X509ClientCertificate" || "SignatureVersion4",
* };
* const command = new GetEndpointCommand(input);
* const response = await client.send(command);
Expand Down
Expand Up @@ -47,6 +47,7 @@ export interface StartSuiteRunCommandOutput extends StartSuiteRunResponse, __Met
* primaryDevice: { // DeviceUnderTest
* thingArn: "STRING_VALUE",
* certificateArn: "STRING_VALUE",
* deviceRoleArn: "STRING_VALUE",
* },
* selectedTestList: [ // SelectedTestList
* "STRING_VALUE",
Expand Down
Expand Up @@ -48,13 +48,14 @@ export interface UpdateSuiteDefinitionCommandOutput extends UpdateSuiteDefinitio
* { // DeviceUnderTest
* thingArn: "STRING_VALUE",
* certificateArn: "STRING_VALUE",
* deviceRoleArn: "STRING_VALUE",
* },
* ],
* intendedForQualification: true || false,
* isLongDurationTest: true || false,
* rootGroup: "STRING_VALUE", // required
* devicePermissionRoleArn: "STRING_VALUE", // required
* protocol: "MqttV3_1_1" || "MqttV5",
* protocol: "MqttV3_1_1" || "MqttV5" || "MqttV3_1_1_OverWebSocket" || "MqttV5_OverWebSocket",
* },
* };
* const command = new UpdateSuiteDefinitionCommand(input);
Expand Down
Expand Up @@ -24,7 +24,7 @@ export const resolveClientEndpointParameters = <T>(
};

export interface EndpointParameters extends __EndpointParameters {
Region: string;
Region?: string;
UseDualStack?: boolean;
UseFIPS?: boolean;
Endpoint?: string;
Expand Down
39 changes: 20 additions & 19 deletions clients/client-iotdeviceadvisor/src/endpoint/ruleset.ts
Expand Up @@ -6,24 +6,25 @@ import { RuleSetObject } from "@aws-sdk/util-endpoints";
or see "smithy.rules#endpointRuleSet"
in codegen/sdk-codegen/aws-models/iotdeviceadvisor.json */

const q="fn",
r="argv",
s="ref";
const a=true,
b=false,
c="String",
d="PartitionResult",
e="tree",
f="error",
g="endpoint",
h={"required":true,"default":false,"type":"Boolean"},
i={[s]:"Endpoint"},
j={[q]:"booleanEquals",[r]:[{[s]:"UseFIPS"},true]},
k={[q]:"booleanEquals",[r]:[{[s]:"UseDualStack"},true]},
l={},
m={[q]:"booleanEquals",[r]:[true,{[q]:"getAttr",[r]:[{[s]:d},"supportsFIPS"]}]},
n={[q]:"booleanEquals",[r]:[true,{[q]:"getAttr",[r]:[{[s]:d},"supportsDualStack"]}]},
const q="required",
r="fn",
s="argv",
t="ref";
const a="isSet",
b="tree",
c="error",
d="endpoint",
e="PartitionResult",
f={[q]:false,"type":"String"},
g={[q]:true,"default":false,"type":"Boolean"},
h={[t]:"Endpoint"},
i={[r]:"booleanEquals",[s]:[{[t]:"UseFIPS"},true]},
j={[r]:"booleanEquals",[s]:[{[t]:"UseDualStack"},true]},
k={},
l={[r]:"booleanEquals",[s]:[true,{[r]:"getAttr",[s]:[{[t]:e},"supportsFIPS"]}]},
m={[r]:"booleanEquals",[s]:[true,{[r]:"getAttr",[s]:[{[t]:e},"supportsDualStack"]}]},
n=[i],
o=[j],
p=[k];
const _data={version:"1.0",parameters:{Region:{required:a,type:c},UseDualStack:h,UseFIPS:h,Endpoint:{required:b,type:c}},rules:[{conditions:[{[q]:"aws.partition",[r]:[{[s]:"Region"}],assign:d}],type:e,rules:[{conditions:[{[q]:"isSet",[r]:[i]}],type:e,rules:[{conditions:o,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:f},{type:e,rules:[{conditions:p,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:f},{endpoint:{url:i,properties:l,headers:l},type:g}]}]},{conditions:[j,k],type:e,rules:[{conditions:[m,n],type:e,rules:[{endpoint:{url:"https://api.iotdeviceadvisor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:l,headers:l},type:g}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:f}]},{conditions:o,type:e,rules:[{conditions:[m],type:e,rules:[{type:e,rules:[{endpoint:{url:"https://api.iotdeviceadvisor-fips.{Region}.{PartitionResult#dnsSuffix}",properties:l,headers:l},type:g}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:f}]},{conditions:p,type:e,rules:[{conditions:[n],type:e,rules:[{endpoint:{url:"https://api.iotdeviceadvisor.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:l,headers:l},type:g}]},{error:"DualStack is enabled but this partition does not support DualStack",type:f}]},{endpoint:{url:"https://api.iotdeviceadvisor.{Region}.{PartitionResult#dnsSuffix}",properties:l,headers:l},type:g}]}]};
p=[{[t]:"Region"}];
const _data={version:"1.0",parameters:{Region:f,UseDualStack:g,UseFIPS:g,Endpoint:f},rules:[{conditions:[{[r]:a,[s]:[h]}],type:b,rules:[{conditions:n,error:"Invalid Configuration: FIPS and custom endpoint are not supported",type:c},{type:b,rules:[{conditions:o,error:"Invalid Configuration: Dualstack and custom endpoint are not supported",type:c},{endpoint:{url:h,properties:k,headers:k},type:d}]}]},{type:b,rules:[{conditions:[{[r]:a,[s]:p}],type:b,rules:[{conditions:[{[r]:"aws.partition",[s]:p,assign:e}],type:b,rules:[{conditions:[i,j],type:b,rules:[{conditions:[l,m],type:b,rules:[{type:b,rules:[{endpoint:{url:"https://api.iotdeviceadvisor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:k,headers:k},type:d}]}]},{error:"FIPS and DualStack are enabled, but this partition does not support one or both",type:c}]},{conditions:n,type:b,rules:[{conditions:[l],type:b,rules:[{type:b,rules:[{endpoint:{url:"https://api.iotdeviceadvisor-fips.{Region}.{PartitionResult#dnsSuffix}",properties:k,headers:k},type:d}]}]},{error:"FIPS is enabled but this partition does not support FIPS",type:c}]},{conditions:o,type:b,rules:[{conditions:[m],type:b,rules:[{type:b,rules:[{endpoint:{url:"https://api.iotdeviceadvisor.{Region}.{PartitionResult#dualStackDnsSuffix}",properties:k,headers:k},type:d}]}]},{error:"DualStack is enabled but this partition does not support DualStack",type:c}]},{type:b,rules:[{endpoint:{url:"https://api.iotdeviceadvisor.{Region}.{PartitionResult#dnsSuffix}",properties:k,headers:k},type:d}]}]}]},{error:"Invalid Configuration: Missing Region",type:c}]}]};
export const ruleSet: RuleSetObject = _data;
38 changes: 35 additions & 3 deletions clients/client-iotdeviceadvisor/src/models/models_0.ts
Expand Up @@ -3,6 +3,20 @@ import { ExceptionOptionType as __ExceptionOptionType } from "@aws-sdk/smithy-cl

import { IotDeviceAdvisorServiceException as __BaseException } from "./IotDeviceAdvisorServiceException";

/**
* @public
* @enum
*/
export const AuthenticationMethod = {
SignatureVersion4: "SignatureVersion4",
X509ClientCertificate: "X509ClientCertificate",
} as const;

/**
* @public
*/
export type AuthenticationMethod = (typeof AuthenticationMethod)[keyof typeof AuthenticationMethod];

/**
* @public
* <p>Sends a Conflict Exception.</p>
Expand All @@ -25,18 +39,24 @@ export class ConflictException extends __BaseException {

/**
* @public
* <p>Information of a test device. A thing ARN or a certificate ARN is required.</p>
* <p>Information of a test device. A thing ARN, certificate ARN
* or device role ARN is required.</p>
*/
export interface DeviceUnderTest {
/**
* <p>Lists devices thing ARN.</p>
* <p>Lists device's thing ARN.</p>
*/
thingArn?: string;

/**
* <p>Lists devices certificate ARN.</p>
* <p>Lists device's certificate ARN.</p>
*/
certificateArn?: string;

/**
* <p>Lists device's role ARN.</p>
*/
deviceRoleArn?: string;
}

/**
Expand All @@ -45,7 +65,9 @@ export interface DeviceUnderTest {
*/
export const Protocol = {
MqttV3_1_1: "MqttV3_1_1",
MqttV3_1_1_OverWebSocket: "MqttV3_1_1_OverWebSocket",
MqttV5: "MqttV5",
MqttV5_OverWebSocket: "MqttV5_OverWebSocket",
} as const;

/**
Expand Down Expand Up @@ -202,6 +224,16 @@ export interface GetEndpointRequest {
* <p>The certificate ARN of the device. This is an optional parameter.</p>
*/
certificateArn?: string;

/**
* <p>The device role ARN of the device. This is an optional parameter.</p>
*/
deviceRoleArn?: string;

/**
* <p>The authentication method used during the device connection.</p>
*/
authenticationMethod?: AuthenticationMethod | string;
}

/**
Expand Down
Expand Up @@ -141,6 +141,8 @@ export const se_GetEndpointCommand = async (
const query: any = map({
thingArn: [, input.thingArn!],
certificateArn: [, input.certificateArn!],
deviceRoleArn: [, input.deviceRoleArn!],
authenticationMethod: [, input.authenticationMethod!],
});
let body: any;
return new __HttpRequest({
Expand Down

0 comments on commit 8e370f2

Please sign in to comment.