aws-crt
Version:
NodeJS/browser bindings to the aws-c-* libraries
278 lines (255 loc) • 14.4 kB
text/typescript
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
import * as test_utils from "@test/mqtt5";
import * as test_env from "@test/test_env"
import * as mqtt5 from "./mqtt5";
import * as iot from "./iot";
import * as fs from 'fs';
import * as auth from "./auth";
import * as io from "./io";
import {CRuntimeType, cRuntime} from "./binding"
jest.setTimeout(10000);
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_mtls_rsa())('Aws Iot Core Direct Mqtt By File - Connection Success', async () => {
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromPath(
test_env.AWS_IOT_ENV.MQTT5_HOST,
test_env.AWS_IOT_ENV.MQTT5_RSA_CERT,
test_env.AWS_IOT_ENV.MQTT5_RSA_KEY
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_mtls_rsa())('Aws Iot Core Direct Mqtt By In-Memory - Connection Success', async () => {
let cert = fs.readFileSync(test_env.AWS_IOT_ENV.MQTT5_RSA_CERT,'utf8');
let key = fs.readFileSync(test_env.AWS_IOT_ENV.MQTT5_RSA_KEY,'utf8');
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromMemory(
test_env.AWS_IOT_ENV.MQTT5_HOST,
cert,
key
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_unsigned())('Aws Iot Core Direct Mqtt Non-Signing Custom Auth - Connection Success', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_PASSWORD, "utf-8")
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Direct Mqtt Signing Custom Auth - Connection Success', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_PASSWORD, "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_TOKEN,
tokenSignature: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_SIGNATURE
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Direct Mqtt Signing Custom Auth - Connection Success Unencoded Signature', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_PASSWORD, "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_TOKEN,
tokenSignature: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_SIGNATURE_UNENCODED
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_cred())('Aws Iot Core Websocket by Sigv4 - Connection Success', async () => {
let provider: auth.AwsCredentialsProvider = auth.AwsCredentialsProvider.newStatic(
test_env.AWS_IOT_ENV.MQTT5_CRED_ACCESS_KEY,
test_env.AWS_IOT_ENV.MQTT5_CRED_SECRET_ACCESS_KEY,
test_env.AWS_IOT_ENV.MQTT5_CRED_SESSION_TOKEN
);
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithSigv4Auth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
credentialsProvider: provider
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
// requires correct credentials to be sourced from the default credentials provider chain
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_websocket())('Aws Iot Core Websocket Default Credentials - Connection Success', async () => {
let provider: auth.AwsCredentialsProvider = auth.AwsCredentialsProvider.newDefault();
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithSigv4Auth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
credentialsProvider: provider
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_cognito())('Aws Iot Core Websocket Cognito Credentials - Connection Success', async () => {
let provider: auth.AwsCredentialsProvider = auth.AwsCredentialsProvider.newCognito(
{
identity: test_env.AWS_IOT_ENV.MQTT5_COGNITO_IDENTITY,
endpoint: test_env.AWS_IOT_ENV.MQTT5_COGNITO_ENDPOINT
}
);
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithSigv4Auth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
credentialsProvider: provider
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_x509())('Aws Iot Core Websocket X509 Credentials - Connection Success', async () => {
let tls_ctx_options: io.TlsContextOptions = io.TlsContextOptions.create_client_with_mtls_from_path(
test_env.AWS_IOT_ENV.MQTT5_X509_CERT,
test_env.AWS_IOT_ENV.MQTT5_X509_KEY
);
let tls_ctx = new io.ClientTlsContext(tls_ctx_options);
let provider: auth.AwsCredentialsProvider = auth.AwsCredentialsProvider.newX509(
{
endpoint: test_env.AWS_IOT_ENV.MQTT5_X509_ENDPOINT,
thingName: test_env.AWS_IOT_ENV.MQTT5_X509_THING_NAME,
roleAlias: test_env.AWS_IOT_ENV.MQTT5_X509_ROLE_ALIAS,
tlsContext: tls_ctx
}
);
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithSigv4Auth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
credentialsProvider: provider
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_unsigned())('Aws Iot Core Direct Mqtt Non-Signing Custom Auth - Connection Failure Bad Password', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_USERNAME,
password: Buffer.from("Thisisnotthepassword", "utf-8")
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testFailedConnection(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Direct Mqtt Signing Custom Auth - Connection Failure Bad Password', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from("Thisisnotthepassword", "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_TOKEN,
tokenSignature: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_SIGNATURE
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testFailedConnection(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Direct Mqtt Signing Custom Auth - Connection Failure Bad Token Value', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_PASSWORD, "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: "ThisIsNotTheTokenValue",
tokenSignature: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_SIGNATURE
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testFailedConnection(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Direct Mqtt Signing Custom Auth - Connection Failure Bad Token Signature', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_PASSWORD, "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_TOKEN,
tokenSignature: "ThisIsNotTheTokenSignature"
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testFailedConnection(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_unsigned())('Aws Iot Core Websocket Mqtt Non-Signing Custom Auth - Connection Success', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_UNSIGNED_PASSWORD, "utf-8")
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_custom_auth_signed())('Aws Iot Core Websocket Mqtt Signing Custom Auth - Connection Success', async () => {
let customAuthConfig : iot.MqttConnectCustomAuthConfig = {
authorizerName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_NAME,
username: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_USERNAME,
password: Buffer.from(test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_PASSWORD, "utf-8"),
tokenKeyName: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_KEY_NAME,
tokenValue: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_TOKEN,
tokenSignature: test_env.AWS_IOT_ENV.MQTT5_CUSTOM_AUTH_SIGNED_SIGNATURE
};
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newWebsocketMqttBuilderWithCustomAuth(
test_env.AWS_IOT_ENV.MQTT5_HOST,
customAuthConfig
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
/**
* Skip test if cruntime is Musl. Softhsm library crashes on Alpine if we don't use AWS_PKCS11_LIB_STRICT_INITIALIZE_FINALIZE.
* Supporting AWS_PKCS11_LIB_STRICT_INITIALIZE_FINALIZE on Node-js is not trivial due to non-deterministic cleanup.
* TODO: Support AWS_PKCS11_LIB_STRICT_INITIALIZE_FINALIZE
*/
test_env.conditional_test(cRuntime !== CRuntimeType.MUSL && test_env.AWS_IOT_ENV.mqtt5_is_valid_pkcs11())('Aws Iot Core PKCS11 - Connection Success', async () => {
const pkcs11_lib = new io.Pkcs11Lib(test_env.AWS_IOT_ENV.MQTT5_PKCS11_LIB_PATH);
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromPkcs11(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
pkcs11_lib: pkcs11_lib,
user_pin: test_env.AWS_IOT_ENV.MQTT5_PKCS11_PIN,
token_label: test_env.AWS_IOT_ENV.MQTT5_PKCS11_TOKEN_LABEL,
private_key_object_label: test_env.AWS_IOT_ENV.MQTT5_PKCS11_PRIVATE_KEY_LABEL,
cert_file_path: test_env.AWS_IOT_ENV.MQTT5_PKCS11_CERT,
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_pkcs12())('Aws Iot Core PKCS12 - Connection Success', async () => {
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromPkcs12(
test_env.AWS_IOT_ENV.MQTT5_HOST,
{
pkcs12_file : test_env.AWS_IOT_ENV.MQTT5_PKCS12_FILE,
pkcs12_password : test_env.AWS_IOT_ENV.MQTT5_PKCS12_PASSWORD
}
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});
test_env.conditional_test(test_env.AWS_IOT_ENV.mqtt5_is_valid_windows_cert())('Aws Iot Core Window Cert - Connection Success', async () => {
let builder = iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromWindowsCertStorePath(
test_env.AWS_IOT_ENV.MQTT5_HOST,
test_env.AWS_IOT_ENV.MQTT5_WINDOWS_CERT
);
await test_utils.testConnect(new mqtt5.Mqtt5Client(builder.build()));
});