Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
public class UsNat extends AbstractLazilyEncodableSection {

public static int ID = 7;
public static int VERSION = 1;
public static int VERSION = 2;
public static String NAME = "usnat";

public UsNat() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.iab.gpp.encoder.datatype.EncodableFixedInteger;
import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList;
import com.iab.gpp.encoder.error.DecodingException;
import com.iab.gpp.encoder.error.InvalidFieldException;
import com.iab.gpp.encoder.field.EncodableBitStringFields;
import com.iab.gpp.encoder.field.UsNatField;
import com.iab.gpp.encoder.section.UsNat;
Expand Down Expand Up @@ -84,6 +85,12 @@ protected EncodableBitStringFields initializeFields() {
@Override
protected String encodeSegment(EncodableBitStringFields fields) {
String bitString = bitStringEncoder.encode(fields, getFieldNames());

Integer version = (Integer)fields.get(UsNatField.VERSION).getValue();
if(version == 1) {
bitString = bitString.substring(0, 48) + bitString.substring(56, 60) + bitString.substring(62);
}

String encodedString = base64UrlEncoder.encode(bitString);
return encodedString;
}
Expand All @@ -110,4 +117,17 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel
}
}

@Override
public Object getFieldValue(String fieldName) {
Object value = super.getFieldValue(fieldName);
Integer version = (Integer)super.getFieldValue(UsNatField.VERSION);
if(version == 1) {
if (fieldName.equals(UsNatField.SENSITIVE_DATA_PROCESSING)) {
value = ((List<Integer>) value).subList(0, 12);
} else if (fieldName.equals(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)) {
value = ((List<Integer>) value).subList(0, 2);
}
}
return value;
}
}
237 changes: 154 additions & 83 deletions iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,6 @@ public void testDecode8() {
@Test
public void testGiantRange() {
String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1);
Assertions.assertEquals(List.of(), FibonacciIntegerRangeEncoder.decode("000000000001111" + max));
Assertions.assertEquals(new ArrayList<>(), FibonacciIntegerRangeEncoder.decode("000000000001111" + max));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,6 @@ public void testDecode10() {
@Test
public void testGiantRange() {
String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1);
Assertions.assertEquals(List.of(), FixedIntegerRangeEncoder.decode("00000000000110000000000000001" + max));
Assertions.assertEquals(new ArrayList<>(), FixedIntegerRangeEncoder.decode("00000000000110000000000000001" + max));
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@


import java.util.Arrays;

import com.iab.gpp.encoder.GppModel;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.iab.gpp.encoder.error.DecodingException;
Expand All @@ -14,7 +16,7 @@ public class UsNatTest {
public void testEncode1() {

UsNat usNat = new UsNat();
Assertions.assertEquals("BAAAAAAAAABA.QA", usNat.encode());
Assertions.assertEquals("CAAAAAAAAABA.QA", usNat.encode());
}

@Test
Expand All @@ -38,7 +40,7 @@ public void testEncode2() {
usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2);
usNat.setFieldValue(UsNatField.GPC, true);

Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode());
Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode());
}

@Test
Expand Down Expand Up @@ -174,20 +176,62 @@ public void testEncode3() {
usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2);
usNat.setFieldValue(UsNatField.GPC, true);

Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode());
Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode());
}

@Test
public void testEncodeWithGpcSegmentIncluded() {

UsNat usNat = new UsNat();
usNat.setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false);
Assertions.assertEquals("BAAAAAAAAABA", usNat.encode());
Assertions.assertEquals("CAAAAAAAAABA", usNat.encode());
}

@Test
public void testEncodeUsNatV1WithV1Values() {
UsNat usNat = new UsNat();
usNat.setFieldValue(UsNatField.VERSION, 1);
usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1));
Assertions.assertEquals(
"BAAAVVVVUQA.QA",
usNat.encode());
}

@Test
public void testEncodeV1WithV2Values() {
UsNat usNat = new UsNat();
usNat.setFieldValue(UsNatField.VERSION, 1);
usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1));
Assertions.assertEquals(
"BAAAVVVVUQA.QA",
usNat.encode());
}

@Test
public void testEncodeV2WithV1Values() {
UsNat usNat = new UsNat();
usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1));
Assertions.assertEquals(
"CAAAVVVVAFBA.QA",
usNat.encode());
}

@Test
public void testEncodeV2WithV2Values() {
UsNat usNat = new UsNat();
usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 1, 1));
Assertions.assertEquals(
"CAAAVVVVVVRA.QA",
usNat.encode());
}

@Test
public void testDecode1() throws DecodingException {
UsNat usNat = new UsNat("BVVVkkkkkpFY.YA");
UsNat usNat = new UsNat("CVVVkkkkkpFY.YA");

Assertions.assertEquals(1, usNat.getSharingNotice());
Assertions.assertEquals(1, usNat.getSaleOptOutNotice());
Expand All @@ -209,7 +253,7 @@ public void testDecode1() throws DecodingException {

@Test
public void testDecodeWithGpcSegmentExcluded() throws DecodingException {
UsNat usNat = new UsNat("BVVVkkkkkpFY");
UsNat usNat = new UsNat("CVVVkkkkkpFY");

Assertions.assertEquals(1, usNat.getSharingNotice());
Assertions.assertEquals(1, usNat.getSaleOptOutNotice());
Expand All @@ -235,4 +279,31 @@ public void testDecodeGarbage() {
new UsNat("z").getSharingNotice();
});
}

@Test
public void testDecodeUsNatV1() {
UsNat usNat = new UsNat("BAAAVVVVUQA.QA");

Assertions.assertEquals(1, usNat.getFieldValue(UsNatField.VERSION));
Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING));
Assertions.assertEquals(Arrays.asList(1, 1), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS));
}

@Test
public void testDecodeUsNatV2WithV1Values() {
UsNat usNat = new UsNat("CAAAVVVVAFBA.QA");

Assertions.assertEquals(2, usNat.getFieldValue(UsNatField.VERSION));
Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING));
Assertions.assertEquals(Arrays.asList(1, 1, 0), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS));
}

@Test
public void testDecodeUsNatV2WithV2Values() {
UsNat usNat = new UsNat("CAAAVVVVVVRA.QA");

Assertions.assertEquals(2, usNat.getFieldValue(UsNatField.VERSION));
Assertions.assertEquals(Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), usNat.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING));
Assertions.assertEquals(Arrays.asList(1, 1, 1), usNat.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS));
}
}
Loading