diff --git a/.gitignore b/.gitignore
index 0160ec82cf1ff..08f1238124660 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,9 @@ temp/
# Spring
**/*packageOutputDirectory*
+# Sensitive files
+*.json.env
+
#javadoc overview files generated from README.md
readme_overview.html
**/javadocTemp/**
diff --git a/sdk/digitaltwins/Print-MyEnvData.ps1 b/sdk/digitaltwins/Print-MyEnvData.ps1
new file mode 100644
index 0000000000000..9c03422e3e87f
--- /dev/null
+++ b/sdk/digitaltwins/Print-MyEnvData.ps1
@@ -0,0 +1,5 @@
+param(
+ [Parameter()]
+ [string] $fileName = "test-resources.json.env"
+)
+([System.Text.Encoding]::UTF8).GetString([Security.Cryptography.ProtectedData]::Unprotect([IO.File]::ReadAllBytes((Resolve-path $fileName)), $null, [Security.Cryptography.DataProtectionScope]::CurrentUser))
\ No newline at end of file
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/pom.xml b/sdk/digitaltwins/azure-digitaltwins-core/pom.xml
index 01c52fa892309..04dc54125c671 100644
--- a/sdk/digitaltwins/azure-digitaltwins-core/pom.xml
+++ b/sdk/digitaltwins/azure-digitaltwins-core/pom.xml
@@ -15,6 +15,12 @@
azure-digitaltwins-core
1.0.0-beta.1
+
+
+ 0.01
+ 0.01
+
+
com.azure
@@ -22,7 +28,24 @@
1.7.0
-
+ com.azure
+ azure-core-http-netty
+ 1.5.4
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.11.2
+
+
+
+
+ com.azure
+ azure-core-test
+ 1.4.0
+ test
+
+
com.azure
azure-identity
1.1.0
@@ -30,13 +53,27 @@
com.azure
- azure-core-http-netty
- 1.5.4
+ azure-core-http-okhttp
+ 1.2.5
+ test
- com.fasterxml.jackson.core
- jackson-annotations
- 2.11.2
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.6.2
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.6.2
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 5.6.2
+ test
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/DigitalTwinsTestBase.java b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/DigitalTwinsTestBase.java
new file mode 100644
index 0000000000000..4f9396d5be0e7
--- /dev/null
+++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/DigitalTwinsTestBase.java
@@ -0,0 +1,110 @@
+package com.azure.digitaltwins.core;
+
+import com.azure.core.credential.AccessToken;
+import com.azure.core.credential.TokenCredential;
+import com.azure.core.credential.TokenRequestContext;
+import com.azure.core.http.policy.HttpLogDetailLevel;
+import com.azure.core.http.policy.HttpLogOptions;
+import com.azure.core.http.policy.HttpPipelinePolicy;
+import com.azure.core.test.TestBase;
+import com.azure.core.test.TestMode;
+import com.azure.core.util.Configuration;
+import com.azure.core.util.logging.ClientLogger;
+import com.azure.identity.ClientSecretCredentialBuilder;
+import reactor.core.publisher.Mono;
+
+import java.util.Locale;
+
+public class DigitalTwinsTestBase extends TestBase
+{
+ protected static final String TENANT_ID = Configuration.getGlobalConfiguration()
+ .get("TENANT_ID", "tenantId");
+
+ protected static final String CLIENT_SECRET = Configuration.getGlobalConfiguration()
+ .get("CLIENT_SECRET", "clientSecret");
+
+ protected static final String CLIENT_ID = Configuration.getGlobalConfiguration()
+ .get("CLIENT_ID", "clientId");
+
+ protected static final String DIGITALTWINS_URL = Configuration.getGlobalConfiguration()
+ .get("DIGITALTWINS_URL", "https://playback.api.wus2.digitaltwins.azure.net");
+
+ protected DigitalTwinsClientBuilder getDigitalTwinsClientBuilder() {
+ DigitalTwinsClientBuilder builder = new DigitalTwinsClientBuilder()
+ .endpoint(DIGITALTWINS_URL);
+
+ if (interceptorManager.isPlaybackMode()){
+ builder.httpClient(interceptorManager.getPlaybackClient());
+ // Use fake credentials for playback mode.
+ builder.tokenCredential(new FakeCredentials());
+ return builder;
+ }
+
+ // TODO: investigate whether or not we need to add a retry policy.
+
+ // If it is record mode, we add record mode policies to the builder.
+ // There is no isRecordMode method on interceptorManger.
+ if (!interceptorManager.isLiveMode()){
+ builder.addPolicy(interceptorManager.getRecordPolicy());
+ }
+
+ // Only get valid live token when running live tests.
+ builder.tokenCredential(new ClientSecretCredentialBuilder()
+ .tenantId(TENANT_ID)
+ .clientId(CLIENT_ID)
+ .clientSecret(CLIENT_SECRET)
+ .build());
+
+ return builder;
+ }
+
+ protected DigitalTwinsClientBuilder getDigitalTwinsClientBuilder(HttpPipelinePolicy... policies) {
+ DigitalTwinsClientBuilder builder = new DigitalTwinsClientBuilder()
+ .endpoint(DIGITALTWINS_URL);
+
+ if (interceptorManager.isPlaybackMode()){
+ builder.httpClient(interceptorManager.getPlaybackClient());
+ // Use fake credentials for playback mode.
+ builder.tokenCredential(new FakeCredentials());
+ addPolicies(builder, policies);
+ return builder;
+ }
+
+ addPolicies(builder, policies);
+
+ // TODO: investigate whether or not we need to add a retry policy.
+
+ // If it is record mode, we add record mode policies to the builder.
+ // There is no isRecordMode method on interceptorManger.
+ if (!interceptorManager.isLiveMode()) {
+ builder.addPolicy(interceptorManager.getRecordPolicy());
+ }
+
+ // Only get valid live token when running live tests.
+ builder.tokenCredential(new ClientSecretCredentialBuilder()
+ .tenantId(TENANT_ID)
+ .clientId(CLIENT_ID)
+ .clientSecret(CLIENT_SECRET)
+ .build());
+
+ return builder;
+ }
+
+ private static void addPolicies(DigitalTwinsClientBuilder builder, HttpPipelinePolicy... policies) {
+ if (policies == null) {
+ return;
+ }
+
+ for (HttpPipelinePolicy policy : policies) {
+ builder.addPolicy(policy);
+ }
+ }
+
+ static class FakeCredentials implements TokenCredential
+ {
+ @Override
+ public Mono getToken(TokenRequestContext tokenRequestContext) {
+ return Mono.empty();
+ }
+ }
+}
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/SampleTest.java b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/SampleTest.java
new file mode 100644
index 0000000000000..fdec1b94937a6
--- /dev/null
+++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/SampleTest.java
@@ -0,0 +1,41 @@
+package com.azure.digitaltwins.core;
+
+import com.azure.core.http.rest.PagedIterable;
+import com.azure.digitaltwins.core.models.ModelData;
+import org.junit.jupiter.api.Test;
+
+public class SampleTest extends DigitalTwinsTestBase {
+
+ private static DigitalTwinsClient client;
+
+ @Override
+ protected void beforeTest(){
+ super.beforeTest();
+ client = setupClient();
+ }
+
+ @Override
+ protected void afterTest()
+ {
+ super.afterTest();
+ }
+
+ private DigitalTwinsClient setupClient(){
+ return getDigitalTwinsClientBuilder()
+ .buildClient();
+ }
+
+ @Test
+ public void ListTest(){
+ PagedIterable models = client.listModels();
+
+ // Process using the Stream interface by iterating over each page
+ models
+ // You can also subscribe to pages by specifying the preferred page size or the associated continuation token to start the processing from.
+ .streamByPage()
+ .forEach(page -> {
+ System.out.println("Response headers status code is " + page.getStatusCode());
+ page.getValue().forEach(item -> System.out.println("Model retrieved: " + item.getId()));
+ });
+ }
+}
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/prerequisite readme.md b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/prerequisite readme.md
new file mode 100644
index 0000000000000..4729abf44bee1
--- /dev/null
+++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/prerequisite readme.md
@@ -0,0 +1,26 @@
+# Prerequisites
+
+## Install
+
+### Install the latest Powershell 7
+
+- Make sure you run the script using the latest stable version of [powershell 7](https://github.com/PowerShell/PowerShell/releases)
+
+### Install the latest Azure CLI package
+
+- If already installed, check latest version:
+ - Run `az --version` to make sure `azure-cli` is at least **version 2.3.1**
+ - If it isn't, update it
+- Use this link to install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest])
+
+## Delete
+
+To delete the digital twins instance, you need to first delete the endpoint added by the script (the service doesn't yet support cascading delete).
+
+1. To do this, run the command `az dt endpoint delete -n -g --en someEventHubEndpoint`.
+1. If you have other endpoints that have been added outside this script, you can discover them with the command `az dt endpoint list -n -g `.
+1. Then delete them with the same command in step 1.
+
+## Maintenance
+
+In order to maintain the functionality of the Setup.ps1 file, make sure this document stays updated with all the required changes if you run/alter this script.
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/setup.ps1 b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/setup.ps1
new file mode 100644
index 0000000000000..086f7bbce370b
--- /dev/null
+++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/prerequisite/setup.ps1
@@ -0,0 +1,131 @@
+param(
+ [Parameter(Mandatory)]
+ [string] $Region,
+
+ [Parameter(Mandatory)]
+ [string] $ResourceGroup,
+
+ [Parameter(Mandatory)]
+ [string] $SubscriptionId,
+
+ [Parameter(Mandatory)]
+ [ValidateLength(6, 50)]
+ [string] $DigitalTwinName,
+
+ [Parameter()]
+ [string] $AppRegistrationName
+)
+
+Function Connect-AzureSubscription
+{
+ # Ensure the user is logged in
+ try
+ {
+ $azureContext = az account show
+ }
+ catch { }
+
+ if (-not $azureContext)
+ {
+ Write-Host "`nPlease login to Azure..."
+ az login
+ $azureContext = az account show
+ }
+
+ # Ensure the desired subscription is selected
+ $sub = az account show --output tsv --query id
+ if ($sub -ne $SubscriptionId)
+ {
+ Write-Host "`nSelecting subscription $SubscriptionId"
+ az account set --subscription $SubscriptionId
+ }
+
+ return $azureContext
+}
+
+$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
+if (-not $isAdmin)
+{
+ throw "This script must be run in administrative mode."
+}
+
+Connect-AzureSubscription
+
+$Region = $Region.Replace(' ', '')
+
+if (-not $AppRegistrationName)
+{
+ $AppRegistrationName = $ResourceGroup
+}
+
+$appId = az ad app list --show-mine --query "[?displayName=='$AppRegistrationName'].appId" --output tsv
+if (-not $appId)
+{
+ Write-Host "`nCreating App Registration $AppRegistrationName`n"
+ $appId = az ad app create --display-name $AppRegistrationName --native-app --query 'appId' --output tsv
+}
+
+$sp = az ad sp list --show-mine --query "[?appId=='$appId'].appId" --output tsv
+if (-not $sp)
+{
+ Write-Host "`nCreating service principal for app $appId`n"
+ az ad sp create --id $appId --output none
+}
+
+# Get test application OID from the service principal
+$applicationOId = az ad sp show --id $sp --query "objectId" --output tsv
+
+$rgExists = az group exists --name $ResourceGroup
+if ($rgExists -eq "False")
+{
+ Write-Host "`nCreating Resource Group $ResourceGroup in $Region`n"
+ az group create --name $ResourceGroup --location $Region --output none
+}
+
+Write-Host "`nDeploying resources to $ResourceGroup in $Region`n"
+
+$armTemplateFile = Join-Path -Path $PSScriptRoot -ChildPath "../../../../../test-resources.json";
+
+if (-not (Test-Path $armTemplateFile -PathType leaf))
+{
+ throw "`nARM template was not found. Please make sure you have an ARM template file named test-resources.json in the root of the service directory`n"
+}
+
+# Deploy test-resources.json ARM template.
+az deployment group create --resource-group $ResourceGroup --name $($DigitalTwinName.ToLower()) --template-file $armTemplateFile --parameters `
+ baseName=$($DigitalTwinName.ToLower()) `
+ testApplicationOid=$applicationOId `
+ location=$Region
+
+# Even though the output variable names are all capital letters in the script, ARM turns them into a strange casing
+# and we have to use that casing in order to get them from the deployment outputs.
+$dtHostName = az deployment group show -g $ResourceGroup -n $($DigitalTwinName.ToLower()) --query 'properties.outputs.digitaltwinS_URL.value' --output tsv
+
+Write-Host("`nSet a new client secret for $appId`n")
+$appSecret = az ad app credential reset --id $appId --years 2 --query 'password' --output tsv
+
+$outputfileDir = (Get-Item -Path $PSScriptRoot).Parent.Parent.Parent.Parent.Parent.Fullname
+$outputFile = Join-Path -Path $outputfileDir -ChildPath "test-resources.json.env"
+$tenantId = "72f988bf-86f1-41af-91ab-2d7cd011db47"
+
+Add-Type -AssemblyName System.Security
+
+$appSecretJsonEscaped = ConvertTo-Json $appSecret
+$environmentText = @"
+{
+ "DIGITALTWINS_URL": "$dtHostName",
+ "DIGITALTWINS_CLIENT_ID": "$appId",
+ "DIGITALTWINS_CLIENT_SECRET": $appSecretJsonEscaped,
+ "DIGITALTWINS_TENANT_ID": "$tenantId"
+}
+"@
+
+Write-Host "`n$environmentText`n"
+
+Write-Host "`nEnvironment variables set, this will now be encrypted. Copy these values for future reference.`n"
+$bytes = ([System.Text.Encoding]::UTF8).GetBytes($environmentText)
+$protectedBytes = [Security.Cryptography.ProtectedData]::Protect($bytes, $null, [Security.Cryptography.DataProtectionScope]::CurrentUser)
+Set-Content $outputFile -Value $protectedBytes -AsByteStream -Force
+Write-Host "`nTest environment settings stored into encrypted $outputFile`n"
+
+Write-Host "Done!"
diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/session-records/ListTest.json b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/session-records/ListTest.json
new file mode 100644
index 0000000000000..0fbc08187eead
--- /dev/null
+++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/resources/session-records/ListTest.json
@@ -0,0 +1,21 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.api.wus2.digitaltwins.azure.net/models?api-version=2020-05-31-preview",
+ "Headers" : {
+ "User-Agent" : "azsdk-java-azure-digitaltwins-core/1.0.0-beta.1 (11.0.7; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "2c291200-e7dc-4262-89bc-7b9d33e0cf08"
+ },
+ "Response" : {
+ "Strict-Transport-Security" : "max-age=2592000",
+ "retry-after" : "0",
+ "Content-Length" : "8404",
+ "StatusCode" : "200",
+ "Body" : "{\"value\":[{\"id\":\"dtmi:example:Ward;114653809\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:35:57.0043855+00:00\"},{\"id\":\"dtmi:example:Ward;111815882\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:35:57.3524717+00:00\"},{\"id\":\"dtmi:example:Ward;189947004\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:04.264631+00:00\"},{\"id\":\"dtmi:example:Ward;134000272\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:05.0983867+00:00\"},{\"id\":\"dtmi:example:Ward;192739528\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:11.4816322+00:00\"},{\"id\":\"dtmi:example:Ward;116332842\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:11.7749519+00:00\"},{\"id\":\"dtmi:example:Ward;116238422\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:29.4055305+00:00\"},{\"id\":\"dtmi:example:Ward;198163867\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:29.8807133+00:00\"},{\"id\":\"dtmi:example:Ward;121159740\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:51.8135839+00:00\"},{\"id\":\"dtmi:example:Ward;121200167\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:36:52.3203982+00:00\"},{\"id\":\"dtmi:example:Ward;112162783\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:08.6579838+00:00\"},{\"id\":\"dtmi:example:Ward;147373991\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:09.529767+00:00\"},{\"id\":\"dtmi:example:Ward;161147759\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:15.2200393+00:00\"},{\"id\":\"dtmi:example:Ward;120708472\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:15.2352591+00:00\"},{\"id\":\"dtmi:example:Ward;110887268\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:22.2311573+00:00\"},{\"id\":\"dtmi:example:Ward;118301577\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:37:22.3667165+00:00\"},{\"id\":\"dtmi:example:Ward;139439832\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:40:48.8947652+00:00\"},{\"id\":\"dtmi:example:Ward;111263086\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:40:54.0431308+00:00\"},{\"id\":\"dtmi:example:Ward;168646450\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:05.1032132+00:00\"},{\"id\":\"dtmi:example:Ward;115143769\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:06.4744458+00:00\"},{\"id\":\"dtmi:example:Ward;128072960\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:10.0981475+00:00\"},{\"id\":\"dtmi:example:Ward;110184439\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:10.1085481+00:00\"},{\"id\":\"dtmi:example:Ward;116847374\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:16.6955258+00:00\"},{\"id\":\"dtmi:example:Ward;155773321\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:17.7553908+00:00\"},{\"id\":\"dtmi:example:Ward;114761833\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:37.6566323+00:00\"},{\"id\":\"dtmi:example:Ward;120391613\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:48.012186+00:00\"},{\"id\":\"dtmi:example:Ward;159816443\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:53.8412956+00:00\"},{\"id\":\"dtmi:example:Ward;112440549\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:41:58.1808299+00:00\"},{\"id\":\"dtmi:example:Ward;186622131\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:42:01.9623456+00:00\"},{\"id\":\"dtmi:example:Ward;145075813\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:42:02.2606087+00:00\"},{\"id\":\"dtmi:example:Ward;145121366\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:42:09.2690772+00:00\"},{\"id\":\"dtmi:example:Ward;116421010\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:42:09.6711432+00:00\"},{\"id\":\"dtmi:example:wifiroom;14907\",\"description\":{},\"displayName\":{\"en\":\"RoomWithWifi\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:44:42.3445106+00:00\"},{\"id\":\"dtmi:example:wifi;117599647\",\"description\":{},\"displayName\":{\"en\":\"Wifi\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:44:42.3447161+00:00\"},{\"id\":\"dtmi:example:Ward;115429255\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:48:26.6388005+00:00\"},{\"id\":\"dtmi:example:Ward;189540703\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:48:26.7312243+00:00\"},{\"id\":\"dtmi:example:Ward;144568920\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:48:30.5678849+00:00\"},{\"id\":\"dtmi:example:Ward;110855032\",\"description\":{\"en\":\"A separate partition in a building, made of rooms and hallways.\"},\"displayName\":{\"en\":\"Ward\"},\"decommissioned\":false,\"uploadTime\":\"2020-07-28T23:48:30.7037839+00:00\"}],\"nextLink\":null}",
+ "Date" : "Mon, 31 Aug 2020 20:27:27 GMT",
+ "Content-Type" : "application/json; charset=utf-8"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ ]
+}
\ No newline at end of file
diff --git a/sdk/digitaltwins/test-resources.json b/sdk/digitaltwins/test-resources.json
index 90b11322185f5..5d830cf1169de 100644
--- a/sdk/digitaltwins/test-resources.json
+++ b/sdk/digitaltwins/test-resources.json
@@ -147,7 +147,7 @@
}
],
"outputs": {
- "DIGITALTWINS_ADT_INSTANCE_ENDPOINT_URL": {
+ "DIGITALTWINS_URL": {
"type": "string",
"value": "[concat('https://', reference(variables('digitalTwinInstanceResourceId'), '2020-03-01-preview').hostName)]"
}
diff --git a/sdk/digitaltwins/tests.yml b/sdk/digitaltwins/tests.yml
index b07ab1f79b184..2f799c176aa1e 100644
--- a/sdk/digitaltwins/tests.yml
+++ b/sdk/digitaltwins/tests.yml
@@ -5,7 +5,4 @@ extends:
parameters:
ServiceDirectory: digitaltwins
Location: westus2
- SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources-preview)
- EnvVars:
- # Runs live tests.
- AZURE_IOT_TEST_MODE: Live
\ No newline at end of file
+ SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources-preview)
\ No newline at end of file