Skip to content

Commit 223cba2

Browse files
committed
Add test cases and address comments
1 parent f181454 commit 223cba2

13 files changed

+417
-219
lines changed

src/main/java/com/uid2/client/KeyContainer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,19 +116,19 @@ public long getTokenExpirySeconds() {
116116
return tokenExpirySeconds;
117117
}
118118

119-
public long getMaxBidstreamLifetimeSeconds() {
119+
long getMaxBidstreamLifetimeSeconds() {
120120
return maxBidstreamLifetimeSeconds;
121121
}
122122

123-
public long getMaxSharingLifetimeSeconds() {
123+
long getMaxSharingLifetimeSeconds() {
124124
return maxSharingLifetimeSeconds;
125125
}
126126

127-
public long getAllowClockSkewSeconds() {
127+
long getAllowClockSkewSeconds() {
128128
return allowClockSkewSeconds;
129129
}
130130

131-
public IdentityScope getIdentityScope() {
131+
IdentityScope getIdentityScope() {
132132
return identityScope;
133133
}
134134
}

src/main/java/com/uid2/client/PrivacyBits.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.BitSet;
44

5-
public class PrivacyBits {
5+
class PrivacyBits {
66
// Bit 0 is legacy and is no longer in use
77
private final int bitClientSideGenerated = 1;
88

src/main/java/com/uid2/client/TokenHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.time.Instant;
66
import java.util.concurrent.atomic.AtomicReference;
77

8-
public class TokenHelper {
8+
class TokenHelper {
99
private final Uid2Helper uid2Helper;
1010
private final Uid2ClientHelper uid2ClientHelper;
1111
private final AtomicReference<KeyContainer> container = new AtomicReference<>(null);;
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.uid2.client;
2+
3+
import java.time.Instant;
4+
import java.time.temporal.ChronoUnit;
5+
import java.util.Base64;
6+
7+
import static com.uid2.client.TestData.*;
8+
9+
class AdvertisingTokenBuilder {
10+
TokenVersionForTesting version = TokenVersionForTesting.V4;
11+
String rawUid = EXAMPLE_UID;
12+
Key masterKey = MASTER_KEY;
13+
Key siteKey = SITE_KEY;
14+
int siteId = SITE_ID;
15+
int privacyBits = PrivacyBitsBuilder.Builder().WithAllFlagsDisabled().Build();
16+
Instant expiry = Instant.now().plus(1, ChronoUnit.HOURS);
17+
IdentityScope identityScope = IdentityScope.UID2;
18+
Instant generated = Instant.now();
19+
20+
static AdvertisingTokenBuilder builder() {
21+
return new AdvertisingTokenBuilder();
22+
}
23+
24+
AdvertisingTokenBuilder withVersion(TokenVersionForTesting version)
25+
{
26+
this.version = version;
27+
return this;
28+
}
29+
30+
AdvertisingTokenBuilder withRawUid(String rawUid)
31+
{
32+
this.rawUid = rawUid;
33+
return this;
34+
}
35+
36+
AdvertisingTokenBuilder withMasterKey(Key masterKey)
37+
{
38+
this.masterKey = masterKey;
39+
return this;
40+
}
41+
42+
AdvertisingTokenBuilder withSiteKey(Key siteKey)
43+
{
44+
this.siteKey = siteKey;
45+
return this;
46+
}
47+
48+
AdvertisingTokenBuilder withPrivacyBits(int privacyBits)
49+
{
50+
this.privacyBits = privacyBits;
51+
return this;
52+
}
53+
54+
AdvertisingTokenBuilder withExpiry(Instant expiry)
55+
{
56+
this.expiry = expiry;
57+
return this;
58+
}
59+
60+
AdvertisingTokenBuilder withScope(IdentityScope identityScope)
61+
{
62+
this.identityScope = identityScope;
63+
return this;
64+
}
65+
66+
AdvertisingTokenBuilder withGenerated(Instant generated)
67+
{
68+
this.generated = generated;
69+
return this;
70+
}
71+
72+
73+
String build() throws Exception {
74+
Uid2TokenGenerator.Params params = Uid2TokenGenerator.defaultParams().WithPrivacyBits(privacyBits).withTokenExpiry(expiry).WithTokenGenerated(generated);
75+
76+
params.identityScope = identityScope.value;
77+
String token;
78+
switch (version) {
79+
case V2:
80+
token = Base64.getEncoder().encodeToString(Uid2TokenGenerator.generateUid2TokenV2(rawUid, MASTER_KEY, SITE_ID, SITE_KEY, params));
81+
break;
82+
case V3:
83+
token = Uid2TokenGenerator.generateUid2TokenV3(rawUid, MASTER_KEY, SITE_ID, SITE_KEY, params);
84+
break;
85+
case V4:
86+
token = Uid2TokenGenerator.generateUid2TokenV4(rawUid, MASTER_KEY, SITE_ID, SITE_KEY, params);
87+
break;
88+
default:
89+
throw new Uid2Exception("Invalid token UID2 version: " + version);
90+
}
91+
92+
IdentityType identityType = IdentityType.Email;
93+
if (version != TokenVersionForTesting.V2)
94+
{
95+
char firstChar = rawUid.charAt(0);
96+
if (firstChar == 'F' || firstChar == 'B')
97+
identityType = IdentityType.Phone;
98+
}
99+
100+
101+
EncryptionTestsV4.validateAdvertisingToken(token, identityScope, identityType, version);
102+
return token;
103+
}
104+
}
105+
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.uid2.client;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.time.Instant;
6+
import java.time.temporal.ChronoUnit;
7+
8+
import static com.uid2.client.TestData.*;
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
11+
public class AdvertisingTokenBuilderTest {
12+
private final int V2TokenLength = 180;
13+
private final int V3TokenLength = 220;
14+
private final int V4TokenLength = 218;
15+
private final Key someKey = new Key(75, 10, Instant.now().plus(42, ChronoUnit.SECONDS), Instant.now().plus(42, ChronoUnit.HOURS), Instant.now().plus(42, ChronoUnit.HOURS), getMasterSecret());
16+
17+
18+
@Test
19+
public void createsTokenOfDesiredVersion_V2() throws Exception {
20+
String token = AdvertisingTokenBuilder.builder().withVersion(TokenVersionForTesting.V2).build();
21+
assertEquals(V2TokenLength, token.length());
22+
}
23+
24+
@Test
25+
public void createsTokenOfDesiredVersion_V3() throws Exception {
26+
String token = AdvertisingTokenBuilder.builder().withVersion(TokenVersionForTesting.V3).build();
27+
assertEquals(V3TokenLength, token.length());
28+
}
29+
30+
@Test
31+
public void createsTokenOfDesiredVersion_V4() throws Exception {
32+
String token = AdvertisingTokenBuilder.builder().withVersion(TokenVersionForTesting.V4).build();
33+
assertEquals(V4TokenLength, token.length());
34+
}
35+
36+
@Test
37+
public void createsTokenOfDesiredVersion_ByDefaultCreatesV4Token() throws Exception {
38+
String token = AdvertisingTokenBuilder.builder().build();
39+
assertEquals(V4TokenLength, token.length());
40+
}
41+
42+
@Test
43+
public void builderSetterTests_Version() {
44+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withVersion(TokenVersionForTesting.V3);
45+
assertEquals(TokenVersionForTesting.V3, builder.version);
46+
}
47+
48+
@Test
49+
public void builderSetterTests_RawUid() {
50+
String rawUid = "raw uid";
51+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withRawUid(rawUid);
52+
assertEquals(rawUid, builder.rawUid);
53+
}
54+
55+
@Test
56+
public void builderSetterTests_MasterKey() {
57+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withMasterKey(someKey);
58+
assertEquals(someKey, builder.masterKey);
59+
}
60+
61+
@Test
62+
public void builderSetterTests_SiteKey() {
63+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withSiteKey(someKey);
64+
assertEquals(someKey, builder.siteKey);
65+
}
66+
67+
@Test
68+
public void builderSetterTests_SiteId() {
69+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder();
70+
assertEquals(SITE_ID, builder.siteId);
71+
}
72+
73+
@Test
74+
public void builderSetterTests_PrivacyBits() {
75+
int privacyBits = 42;
76+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withPrivacyBits(privacyBits);
77+
assertEquals(privacyBits, builder.privacyBits);
78+
}
79+
80+
@Test
81+
public void builderSetterTests_Expiry() {
82+
Instant expiry = Instant.now().plus(42, ChronoUnit.HOURS);
83+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder().withExpiry(expiry);
84+
assertEquals(expiry, builder.expiry);
85+
}
86+
87+
@Test
88+
public void builderSetterTests_Scope() {
89+
AdvertisingTokenBuilder builder = AdvertisingTokenBuilder.builder();
90+
assertEquals(IdentityScope.UID2, builder.identityScope);
91+
}
92+
}

0 commit comments

Comments
 (0)