Skip to content

Commit 064b197

Browse files
add bot identifier (Azure#33634)
1 parent 0cf2d16 commit 064b197

File tree

8 files changed

+239
-19
lines changed

8 files changed

+239
-19
lines changed

eng/jacoco-test-coverage/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
<dependency>
7474
<groupId>com.azure</groupId>
7575
<artifactId>azure-communication-common</artifactId>
76-
<version>1.3.0-beta.2</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
76+
<version>2.0.0-beta.1</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
7777
</dependency>
7878
<dependency>
7979
<groupId>com.azure</groupId>

eng/versioning/version_client.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ com.azure:azure-aot-graalvm-perf;1.0.0-beta.1;1.0.0-beta.1
6161
com.azure:azure-communication-chat;1.3.6;1.4.0-beta.1
6262
com.azure:azure-communication-callingserver;1.0.0-beta.4;1.0.0-beta.5
6363
com.azure:azure-communication-callautomation;1.0.0-beta.1;1.0.0-beta.2
64-
com.azure:azure-communication-common;1.2.6;1.3.0-beta.2
64+
com.azure:azure-communication-common;1.2.6;2.0.0-beta.1
6565
com.azure:azure-communication-common-perf;1.0.0-beta.1;1.0.0-beta.1
6666
com.azure:azure-communication-sms;1.1.11;1.2.0-beta.1
6767
com.azure:azure-communication-identity;1.4.4;1.5.0-beta.1

sdk/communication/azure-communication-common-perf/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<dependency>
2929
<groupId>com.azure</groupId>
3030
<artifactId>azure-communication-common</artifactId>
31-
<version>1.3.0-beta.2</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
31+
<version>2.0.0-beta.1</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
3232
</dependency>
3333
<dependency>
3434
<groupId>com.azure</groupId>

sdk/communication/azure-communication-common/CHANGELOG.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# Release History
22

3-
## 1.3.0-beta.2 (Unreleased)
3+
## 2.0.0-beta.1 (Unreleased)
44

5-
### Bug Fixes
5+
### Features Added
6+
- Added support for a new communication identifier `MicrosoftBotIdentifier`.
67

7-
### Other Changes
8+
### Breaking Changes
9+
- Introduction of `MicrosoftBotIdentifier` is a breaking change. It will affect code that relied on using `UnknownIdentifier` with a rawID starting with `28:`
810

9-
#### Dependency Updates
11+
### Bugs Fixed
1012

1113
## 1.2.6 (2023-03-07)
1214

sdk/communication/azure-communication-common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<groupId>com.azure</groupId>
1414
<artifactId>azure-communication-common</artifactId>
1515
<packaging>jar</packaging>
16-
<version>1.3.0-beta.2</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
16+
<version>2.0.0-beta.1</version> <!-- {x-version-update;com.azure:azure-communication-common;current} -->
1717

1818
<name>Microsoft Azure common library for communication service client</name>
1919
<description>

sdk/communication/azure-communication-common/src/main/java/com/azure/communication/common/CommunicationIdentifier.java

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,36 @@
99
*/
1010
public abstract class CommunicationIdentifier {
1111

12+
static final String PHONE_NUMBER_PREFIX = "4:";
13+
14+
static final String BOT_PREFIX = "28:";
15+
16+
static final String BOT_PUBLIC_CLOUD_PREFIX = "28:orgid:";
17+
18+
static final String BOT_DOD_CLOUD_PREFIX = "28:dod:";
19+
20+
static final String BOT_DOD_CLOUD_GLOBAL_PREFIX = "28:dod-global:";
21+
22+
static final String BOT_GCCH_CLOUD_PREFIX = "28:gcch:";
23+
24+
static final String BOT_GCCH_CLOUD_GLOBAL_PREFIX = "28:gcch-global:";
25+
26+
static final String TEAMS_USER_ANONYMOUS_PREFIX = "8:teamsvisitor:";
27+
28+
static final String TEAMS_USER_PUBLIC_CLOUD_PREFIX = "8:orgid:";
29+
30+
static final String TEAMS_USER_DOD_CLOUD_PREFIX = "8:dod:";
31+
32+
static final String TEAMS_USER_GCCH_CLOUD_PREFIX = "8:gcch:";
33+
34+
static final String ACS_USER_PREFIX = "8:acs:";
35+
36+
static final String ACS_USER_DOD_CLOUD_PREFIX = "8:dod-acs:";
37+
38+
static final String ACS_USER_GCCH_CLOUD_PREFIX = "8:gcch-acs:";
39+
40+
static final String SPOOL_USER_PREFIX = "8:spool:";
41+
1242
private String rawId;
1343

1444
/**
@@ -23,27 +53,40 @@ public static CommunicationIdentifier fromRawId(String rawId) {
2353
throw new IllegalArgumentException("The parameter [rawId] cannot be null to empty.");
2454
}
2555

26-
if (rawId.startsWith("4:")) {
27-
return new PhoneNumberIdentifier(rawId.substring("4:".length()));
56+
if (rawId.startsWith(PHONE_NUMBER_PREFIX)) {
57+
return new PhoneNumberIdentifier(rawId.substring(PHONE_NUMBER_PREFIX.length()));
2858
}
2959
final String[] segments = rawId.split(":");
30-
if (segments.length < 3) {
60+
if (segments.length != 3) {
61+
if (segments.length == 2 && rawId.startsWith(BOT_PREFIX)) {
62+
return new MicrosoftBotIdentifier(segments[1], false, CommunicationCloudEnvironment.PUBLIC);
63+
}
3164
return new UnknownIdentifier(rawId);
3265
}
3366

3467
final String prefix = segments[0] + ":" + segments[1] + ":";
35-
final String suffix = rawId.substring(prefix.length());
68+
final String suffix = segments[2];
3669

37-
if ("8:teamsvisitor:".equals(prefix)) {
70+
if (TEAMS_USER_ANONYMOUS_PREFIX.equals(prefix)) {
3871
return new MicrosoftTeamsUserIdentifier(suffix, true);
39-
} else if ("8:orgid:".equals(prefix)) {
72+
} else if (TEAMS_USER_PUBLIC_CLOUD_PREFIX.equals(prefix)) {
4073
return new MicrosoftTeamsUserIdentifier(suffix, false);
41-
} else if ("8:dod:".equals(prefix)) {
74+
} else if (TEAMS_USER_DOD_CLOUD_PREFIX.equals(prefix)) {
4275
return new MicrosoftTeamsUserIdentifier(suffix, false).setCloudEnvironment(CommunicationCloudEnvironment.DOD);
43-
} else if ("8:gcch:".equals(prefix)) {
76+
} else if (TEAMS_USER_GCCH_CLOUD_PREFIX.equals(prefix)) {
4477
return new MicrosoftTeamsUserIdentifier(suffix, false).setCloudEnvironment(CommunicationCloudEnvironment.GCCH);
45-
} else if ("8:acs:".equals(prefix) || "8:spool:".equals(prefix) || "8:dod-acs:".equals(prefix) || "8:gcch-acs:".equals(prefix)) {
78+
} else if (ACS_USER_PREFIX.equals(prefix) || SPOOL_USER_PREFIX.equals(prefix) || ACS_USER_DOD_CLOUD_PREFIX.equals(prefix) || ACS_USER_GCCH_CLOUD_PREFIX.equals(prefix)) {
4679
return new CommunicationUserIdentifier(rawId);
80+
} else if (BOT_GCCH_CLOUD_GLOBAL_PREFIX.equals(prefix)) {
81+
return new MicrosoftBotIdentifier(suffix, false, CommunicationCloudEnvironment.GCCH);
82+
} else if (BOT_PUBLIC_CLOUD_PREFIX.equals(prefix)) {
83+
return new MicrosoftBotIdentifier(suffix, true, CommunicationCloudEnvironment.PUBLIC);
84+
} else if (BOT_DOD_CLOUD_GLOBAL_PREFIX.equals(prefix)) {
85+
return new MicrosoftBotIdentifier(suffix, false, CommunicationCloudEnvironment.DOD);
86+
} else if (BOT_GCCH_CLOUD_PREFIX.equals(prefix)) {
87+
return new MicrosoftBotIdentifier(suffix, true, CommunicationCloudEnvironment.GCCH);
88+
} else if (BOT_DOD_CLOUD_PREFIX.equals(prefix)) {
89+
return new MicrosoftBotIdentifier(suffix, true, CommunicationCloudEnvironment.DOD);
4790
}
4891

4992
return new UnknownIdentifier(rawId);
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.communication.common;
5+
6+
import com.azure.core.util.CoreUtils;
7+
8+
/**
9+
* Communication identifier for Microsoft Bot
10+
*/
11+
public final class MicrosoftBotIdentifier extends CommunicationIdentifier {
12+
private final String botId;
13+
private final boolean isResourceAccountConfigured;
14+
private boolean rawIdSet = false;
15+
16+
private final CommunicationCloudEnvironment cloudEnvironment;
17+
18+
/**
19+
* Creates a MicrosoftBotIdentifier object
20+
*
21+
* @param botId botId The unique Microsoft app ID for the bot as registered with the Bot Framework.
22+
* @param cloudEnvironment the cloud environment in which this identifier is created.
23+
* @param isResourceAccountConfigured set this to true if the bot is tenantized. It is false if the bot is global and no resource account is configured.
24+
* @throws IllegalArgumentException thrown if botId parameter fail the validation.
25+
*/
26+
public MicrosoftBotIdentifier(String botId, boolean isResourceAccountConfigured, CommunicationCloudEnvironment cloudEnvironment) {
27+
if (CoreUtils.isNullOrEmpty(botId)) {
28+
throw new IllegalArgumentException("The initialization parameter [botId] cannot be null or empty.");
29+
}
30+
this.botId = botId;
31+
this.cloudEnvironment = cloudEnvironment;
32+
this.isResourceAccountConfigured = isResourceAccountConfigured;
33+
generateRawId();
34+
}
35+
36+
/**
37+
* Creates a MicrosoftBotIdentifier object
38+
*
39+
* @param botId Id of the Microsoft bot.
40+
* @throws IllegalArgumentException thrown if botId parameter fail the validation.
41+
*/
42+
public MicrosoftBotIdentifier(String botId) {
43+
this(botId, true, CommunicationCloudEnvironment.PUBLIC);
44+
}
45+
46+
/**
47+
* Creates a MicrosoftBotIdentifier object
48+
*
49+
* @param botId Id of the Microsoft bot.
50+
* @param isResourceAccountConfigured set this to true if the bot is tenantized. It is false if the bot is global and no resource account is configured.
51+
* @throws IllegalArgumentException thrown if botId parameter fail the validation.
52+
*/
53+
public MicrosoftBotIdentifier(String botId, boolean isResourceAccountConfigured) {
54+
this(botId, isResourceAccountConfigured, CommunicationCloudEnvironment.PUBLIC);
55+
}
56+
57+
/**
58+
* Get bot Id
59+
* @return bot Id of the Microsoft bot.
60+
*/
61+
public String getBotId() {
62+
return this.botId;
63+
}
64+
65+
/**
66+
* @return True if the bot is tenantized. It is False if the bot is global and no resource account is configured.
67+
*/
68+
public boolean isResourceAccountConfigured() {
69+
return this.isResourceAccountConfigured;
70+
}
71+
72+
/**
73+
* Get cloud environment of the bot identifier
74+
*
75+
* @return cloud environment in which this identifier is created
76+
*/
77+
public CommunicationCloudEnvironment getCloudEnvironment() {
78+
return cloudEnvironment;
79+
}
80+
81+
/**
82+
* Set full id of the identifier
83+
* RawId is the encoded format for identifiers to store in databases or as stable keys in general.
84+
*
85+
* @param rawId full id of the identifier
86+
* @return MicrosoftBotIdentifier object itself
87+
*/
88+
@Override
89+
public MicrosoftBotIdentifier setRawId(String rawId) {
90+
super.setRawId(rawId);
91+
rawIdSet = true;
92+
return this;
93+
}
94+
95+
@Override
96+
public boolean equals(Object that) {
97+
if (this == that) {
98+
return true;
99+
}
100+
101+
if (!(that instanceof MicrosoftBotIdentifier)) {
102+
return false;
103+
}
104+
105+
return ((MicrosoftBotIdentifier) that).getRawId().equals(getRawId());
106+
}
107+
108+
@Override
109+
public int hashCode() {
110+
return getRawId().hashCode();
111+
}
112+
113+
private void generateRawId() {
114+
if (!rawIdSet) {
115+
if (!this.isResourceAccountConfigured) {
116+
if (cloudEnvironment.equals(CommunicationCloudEnvironment.DOD)) {
117+
super.setRawId(BOT_DOD_CLOUD_GLOBAL_PREFIX + this.botId);
118+
} else if (cloudEnvironment.equals(CommunicationCloudEnvironment.GCCH)) {
119+
super.setRawId(BOT_GCCH_CLOUD_GLOBAL_PREFIX + this.botId);
120+
} else {
121+
super.setRawId(BOT_PREFIX + this.botId);
122+
}
123+
} else if (cloudEnvironment.equals(CommunicationCloudEnvironment.DOD)) {
124+
super.setRawId(BOT_DOD_CLOUD_PREFIX + this.botId);
125+
} else if (cloudEnvironment.equals(CommunicationCloudEnvironment.GCCH)) {
126+
super.setRawId(BOT_GCCH_CLOUD_PREFIX + this.botId);
127+
} else {
128+
super.setRawId(BOT_PUBLIC_CLOUD_PREFIX + this.botId);
129+
}
130+
}
131+
}
132+
}

sdk/communication/azure-communication-common/src/test/java/com/azure/communication/common/CommunicationIdentifierTests.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,23 @@ public void defaultCloudIsPublicForMicrosoftTeamsUserIdentifier() {
1717
new MicrosoftTeamsUserIdentifier(userId, true).setRawId(fullId).getCloudEnvironment());
1818
}
1919

20+
@Test
21+
public void exceptionThrownForMicrosoftBotWithNoId() {
22+
assertThrows(IllegalArgumentException.class, () -> {
23+
new MicrosoftTeamsUserIdentifier("");
24+
});
25+
}
26+
27+
@Test
28+
public void defaultCloudIsPublicForMicrosoftBotIdentifier() {
29+
assertEquals(CommunicationCloudEnvironment.PUBLIC,
30+
new MicrosoftBotIdentifier(userId, false).setRawId(fullId).getCloudEnvironment());
31+
}
32+
33+
@Test
34+
public void defaultIsResourceAccountConfiguredIsTrueForMicrosoftBotIdentifier() {
35+
assertTrue(new MicrosoftBotIdentifier(userId).setRawId(fullId).isResourceAccountConfigured());
36+
}
2037
@Test
2138
public void rawIdTakesPrecedenceInEqualityCheck() {
2239
// Teams users
@@ -68,6 +85,14 @@ public void rawIdTakesPrecedenceInEqualityCheck() {
6885
new PhoneNumberIdentifier("+14255550123"));
6986
assertEquals(new PhoneNumberIdentifier("+14255550123"),
7087
new PhoneNumberIdentifier("+override").setRawId("4:+14255550123"));
88+
89+
// Bots
90+
assertEquals(new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC),
91+
new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC));
92+
assertNotEquals(new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC)
93+
.setRawId("Raw Id"),
94+
new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC)
95+
.setRawId("Another Raw Id"));
7196
}
7297

7398
@Test
@@ -82,6 +107,12 @@ public void getRawIdOfIdentifier() {
82107
assertRawId(new MicrosoftTeamsUserIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false), "8:orgid:45ab2481-1c1c-4005-be24-0ffb879b1130");
83108
assertRawId(new MicrosoftTeamsUserIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", true), "8:teamsvisitor:45ab2481-1c1c-4005-be24-0ffb879b1130");
84109
assertRawId(new MicrosoftTeamsUserIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", true).setRawId("8:orgid:legacyFormat"), "8:orgid:legacyFormat");
110+
assertRawId(new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC), "28:45ab2481-1c1c-4005-be24-0ffb879b1130");
111+
assertRawId(new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", false, CommunicationCloudEnvironment.GCCH), "28:gcch-global:01234567-89ab-cdef-0123-456789abcdef");
112+
assertRawId(new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", false, CommunicationCloudEnvironment.DOD), "28:dod-global:01234567-89ab-cdef-0123-456789abcdef");
113+
assertRawId(new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.PUBLIC), "28:orgid:01234567-89ab-cdef-0123-456789abcdef");
114+
assertRawId(new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.GCCH), "28:gcch:01234567-89ab-cdef-0123-456789abcdef");
115+
assertRawId(new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.DOD), "28:dod:01234567-89ab-cdef-0123-456789abcdef");
85116
assertRawId(new PhoneNumberIdentifier("+112345556789"), "4:+112345556789");
86117
assertRawId(new PhoneNumberIdentifier("112345556789"), "4:112345556789");
87118
assertRawId(new PhoneNumberIdentifier("otherFormat").setRawId("4:207ffef6-9444-41fb-92ab-20eacaae2768"), "4:207ffef6-9444-41fb-92ab-20eacaae2768");
@@ -104,13 +135,18 @@ public void createIdentifierFromRawId() {
104135
assertIdentifier("8:gcch:45ab2481-1c1c-4005-be24-0ffb879b1130", new MicrosoftTeamsUserIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false).setCloudEnvironment(CommunicationCloudEnvironment.GCCH));
105136
assertIdentifier("8:teamsvisitor:45ab2481-1c1c-4005-be24-0ffb879b1130", new MicrosoftTeamsUserIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", true).setCloudEnvironment(CommunicationCloudEnvironment.PUBLIC));
106137
assertIdentifier("8:orgid:legacyFormat", new MicrosoftTeamsUserIdentifier("legacyFormat", false).setCloudEnvironment(CommunicationCloudEnvironment.PUBLIC));
138+
assertIdentifier("28:45ab2481-1c1c-4005-be24-0ffb879b1130", new MicrosoftBotIdentifier("45ab2481-1c1c-4005-be24-0ffb879b1130", false, CommunicationCloudEnvironment.PUBLIC));
139+
assertIdentifier("28:gcch-global:01234567-89ab-cdef-0123-456789abcdef", new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", false, CommunicationCloudEnvironment.GCCH));
140+
assertIdentifier("28:dod-global:01234567-89ab-cdef-0123-456789abcdef", new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", false, CommunicationCloudEnvironment.DOD));
141+
assertIdentifier("28:orgid:01234567-89ab-cdef-0123-456789abcdef", new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.PUBLIC));
142+
assertIdentifier("28:gcch:01234567-89ab-cdef-0123-456789abcdef", new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.GCCH));
143+
assertIdentifier("28:dod:01234567-89ab-cdef-0123-456789abcdef", new MicrosoftBotIdentifier("01234567-89ab-cdef-0123-456789abcdef", true, CommunicationCloudEnvironment.DOD));
107144
assertIdentifier("4:+112345556789", new PhoneNumberIdentifier("+112345556789"));
108145
assertIdentifier("4:112345556789", new PhoneNumberIdentifier("112345556789"));
109146
assertIdentifier("4:207ffef6-9444-41fb-92ab-20eacaae2768", new PhoneNumberIdentifier("207ffef6-9444-41fb-92ab-20eacaae2768"));
110147
assertIdentifier("4:207ffef6-9444-41fb-92ab-20eacaae2768_207ffef6-9444-41fb-92ab-20eacaae2768", new PhoneNumberIdentifier("207ffef6-9444-41fb-92ab-20eacaae2768_207ffef6-9444-41fb-92ab-20eacaae2768"));
111148
assertIdentifier("4:+112345556789_207ffef6-9444-41fb-92ab-20eacaae2768", new PhoneNumberIdentifier("+112345556789_207ffef6-9444-41fb-92ab-20eacaae2768"));
112-
assertIdentifier("28:45ab2481-1c1c-4005-be24-0ffb879b1130", new UnknownIdentifier("28:45ab2481-1c1c-4005-be24-0ffb879b1130"));
113-
149+
assertIdentifier("28:ag09-global:01234567-89ab-cdef-0123-456789abcdef", new UnknownIdentifier("28:ag09-global:01234567-89ab-cdef-0123-456789abcdef"));
114150
final IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class, () -> CommunicationIdentifier.fromRawId(null));
115151
assertEquals("The parameter [rawId] cannot be null to empty.", illegalArgumentException.getMessage());
116152
}
@@ -133,6 +169,13 @@ public void rawIdStaysTheSameAfterConversionToIdentifierAndBack() {
133169
assertRoundTrip("4:207ffef6-9444-41fb-92ab-20eacaae2768_207ffef6-9444-41fb-92ab-20eacaae2768");
134170
assertRoundTrip("4:+112345556789_207ffef6-9444-41fb-92ab-20eacaae2768");
135171
assertRoundTrip("28:45ab2481-1c1c-4005-be24-0ffb879b1130");
172+
assertRoundTrip("28:gcch-global:01234567-89ab-cdef-0123-456789abcdef");
173+
assertRoundTrip("28:dod-global:01234567-89ab-cdef-0123-456789abcdef");
174+
assertRoundTrip("28:orgid:01234567-89ab-cdef-0123-456789abcdef");
175+
assertRoundTrip("28:gcch:01234567-89ab-cdef-0123-456789abcdef");
176+
assertRoundTrip("28:dod:01234567-89ab-cdef-0123-456789abcdef");
177+
assertRoundTrip("28:gal-global:01234567-89ab-cdef-0123-456789abcdef");
178+
assertRoundTrip("48:45ab2481-1c1c-4005-be24-0ffb879b1130");
136179
}
137180

138181
private void assertRawId(CommunicationIdentifier identifier, String expectedRawId) {

0 commit comments

Comments
 (0)