1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.adservices.service.measurement; 18 19 import android.net.Uri; 20 import android.util.Pair; 21 22 import com.android.adservices.common.WebUtil; 23 import com.android.adservices.service.FakeFlagsFactory; 24 import com.android.adservices.service.measurement.aggregation.AggregatableAttributionTrigger; 25 import com.android.adservices.service.measurement.aggregation.AggregateTriggerData; 26 import com.android.adservices.service.measurement.util.UnsignedLong; 27 28 import org.json.JSONArray; 29 30 import java.math.BigInteger; 31 import java.util.Collections; 32 import java.util.List; 33 import java.util.Map; 34 import java.util.Set; 35 import java.util.UUID; 36 37 public final class TriggerFixture { TriggerFixture()38 private TriggerFixture() { } 39 40 // Assume the field values in this Trigger.Builder have no relation to the field values in 41 // {@link ValidTriggerParams} getValidTriggerBuilder()42 public static Trigger.Builder getValidTriggerBuilder() { 43 return new Trigger.Builder() 44 .setAttributionDestination(ValidTriggerParams.ATTRIBUTION_DESTINATION) 45 .setEnrollmentId(ValidTriggerParams.ENROLLMENT_ID) 46 .setRegistrant(ValidTriggerParams.REGISTRANT) 47 .setAggregatableSourceRegistrationTimeConfig( 48 ValidTriggerParams.AGGREGATABLE_SOURCE_REGISTRATION_TIME_CONFIG) 49 .setRegistrationOrigin(ValidTriggerParams.REGISTRATION_ORIGIN); 50 } 51 52 // Assume the field values in this Trigger have no relation to the field values in 53 // {@link ValidTriggerParams} getValidTrigger()54 public static Trigger getValidTrigger() { 55 return new Trigger.Builder() 56 .setId(UUID.randomUUID().toString()) 57 .setAttributionDestination(ValidTriggerParams.ATTRIBUTION_DESTINATION) 58 .setEnrollmentId(ValidTriggerParams.ENROLLMENT_ID) 59 .setRegistrant(ValidTriggerParams.REGISTRANT) 60 .setTriggerTime(ValidTriggerParams.TRIGGER_TIME) 61 .setEventTriggers(ValidTriggerParams.EVENT_TRIGGERS) 62 .setAggregateTriggerData(ValidTriggerParams.AGGREGATE_TRIGGER_DATA) 63 .setAggregateValues(ValidTriggerParams.AGGREGATE_VALUES) 64 .setFilters(ValidTriggerParams.TOP_LEVEL_FILTERS_JSON_STRING) 65 .setNotFilters(ValidTriggerParams.TOP_LEVEL_NOT_FILTERS_JSON_STRING) 66 .setAttributionConfig(ValidTriggerParams.ATTRIBUTION_CONFIGS_STRING) 67 .setAdtechBitMapping(ValidTriggerParams.X_NETWORK_KEY_MAPPING) 68 .setRegistrationOrigin(ValidTriggerParams.REGISTRATION_ORIGIN) 69 .setAggregationCoordinatorOrigin(ValidTriggerParams.AGGREGATION_COORDINATOR_ORIGIN) 70 .setAggregatableSourceRegistrationTimeConfig( 71 ValidTriggerParams.AGGREGATABLE_SOURCE_REGISTRATION_TIME_CONFIG) 72 .setTriggerContextId(ValidTriggerParams.TRIGGER_CONTEXT_ID) 73 .setAttributionScopesString(ValidTriggerParams.ATTRIBUTION_SCOPES) 74 .build(); 75 } 76 77 public static class ValidTriggerParams { 78 public static final Long TRIGGER_TIME = 8640000000L; 79 public static final Uri ATTRIBUTION_DESTINATION = 80 Uri.parse("android-app://com.destination"); 81 public static final Uri REGISTRANT = Uri.parse("android-app://com.registrant"); 82 public static final String ENROLLMENT_ID = "enrollment-id"; 83 public static final String TOP_LEVEL_FILTERS_JSON_STRING = 84 "[{\n" 85 + " \"key_1\": [\"value_1\", \"value_2\"],\n" 86 + " \"key_2\": [\"value_1\", \"value_2\"]\n" 87 + "}]\n"; 88 89 public static final String TOP_LEVEL_NOT_FILTERS_JSON_STRING = 90 "[{\"geo\": [], \"source_type\": [\"event\"]}]"; 91 92 public static final String EVENT_TRIGGERS = 93 "[\n" 94 + "{\n" 95 + " \"trigger_data\": \"5\",\n" 96 + " \"priority\": \"123\",\n" 97 + " \"filters\": [{\n" 98 + " \"source_type\": [\"navigation\"],\n" 99 + " \"key_1\": [\"value_1\"] \n" 100 + " }]\n" 101 + "},\n" 102 + "{\n" 103 + " \"trigger_data\": \"0\",\n" 104 + " \"priority\": \"124\",\n" 105 + " \"deduplication_key\": \"101\",\n" 106 + " \"filters\": [{\n" 107 + " \"source_type\": [\"event\"]\n" 108 + " }]\n" 109 + "}\n" 110 + "]\n"; 111 112 public static final String AGGREGATE_TRIGGER_DATA = 113 "[" 114 + "{" 115 + "\"key_piece\":\"0xA80\"," 116 + "\"source_keys\":[\"geoValue\",\"noMatch\"]" 117 + "}" 118 + "]"; 119 120 public static final String AGGREGATE_VALUES = 121 "{" + "\"campaignCounts\":32768," + "\"geoValue\":1664" + "}"; 122 123 public static final UnsignedLong DEBUG_KEY = new UnsignedLong(27836L); 124 125 public static final AttributionConfig ATTRIBUTION_CONFIG = 126 new AttributionConfig.Builder() 127 .setExpiry(604800L) 128 .setSourceAdtech("AdTech1-Ads") 129 .setSourcePriorityRange(new Pair<>(100L, 1000L)) 130 .setSourceFilters( 131 Collections.singletonList( 132 new FilterMap.Builder() 133 .setAttributionFilterMap( 134 Map.of( 135 "campaign_type", 136 Collections.singletonList( 137 "install"), 138 "source_type", 139 Collections.singletonList( 140 "navigation"))) 141 .build())) 142 .setPriority(99L) 143 .setExpiry(604800L) 144 .setFilterData( 145 new FilterMap.Builder() 146 .setAttributionFilterMap( 147 Map.of( 148 "campaign_type", 149 Collections.singletonList("install"))) 150 .build()) 151 .build(); 152 153 public static final String ATTRIBUTION_CONFIGS_STRING = 154 new JSONArray( 155 Collections.singletonList( 156 ATTRIBUTION_CONFIG.serializeAsJson( 157 FakeFlagsFactory.getFlagsForTest()))) 158 .toString(); 159 160 public static final String X_NETWORK_KEY_MAPPING = 161 "{" 162 + "\"AdTechA-enrollment_id\": \"0x1\"," 163 + "\"AdTechB-enrollment_id\": \"0x2\"" 164 + "}"; 165 public static final Uri REGISTRATION_ORIGIN = 166 WebUtil.validUri("https://subdomain.example.test"); 167 168 public static final Uri AGGREGATION_COORDINATOR_ORIGIN = 169 WebUtil.validUri("https://coordinator.example.test"); 170 171 public static final Trigger.SourceRegistrationTimeConfig 172 AGGREGATABLE_SOURCE_REGISTRATION_TIME_CONFIG = 173 Trigger.SourceRegistrationTimeConfig.INCLUDE; 174 175 public static final String PLATFORM_AD_ID = "test-platform-ad-id"; 176 public static final String DEBUG_AD_ID = "test-debug-ad-id"; 177 public static final String TRIGGER_CONTEXT_ID = "test-trigger-context-id"; 178 public static final String ATTRIBUTION_SCOPES = "[\"1\"]"; 179 buildAggregatableAttributionTrigger()180 public static final AggregatableAttributionTrigger buildAggregatableAttributionTrigger() { 181 final FilterMap filter = 182 new FilterMap.Builder() 183 .setAttributionFilterMap( 184 Map.of( 185 "product", 186 List.of("1234", "4321"), 187 "conversion_subdomain", 188 List.of("electronics.megastore"))) 189 .build(); 190 return new AggregatableAttributionTrigger.Builder() 191 .setValues(Map.of("x", 1)) 192 .setTriggerData( 193 List.of( 194 new AggregateTriggerData.Builder() 195 .setKey(BigInteger.ONE) 196 .setSourceKeys(Set.of("sourceKey")) 197 .setFilterSet(List.of(filter)) 198 .build())) 199 .build(); 200 } 201 } 202 } 203