Testar a experiência completa de perguntas e respostas para Web localmente

1. Introdução

Os serviços de lances e leilões (B&A) são compostos por quatro serviços para compradores e vendedores facilitarem um leilão de público-alvo protegido:

Stack do comprador:

  • Serviço de front-end do comprador
  • Serviço de lances

Pilha do vendedor:

  • Serviço de front-end do vendedor
  • Serviço de leilão

Este codelab mostra como configurar e testar a configuração completa no seu ambiente local. O tutorial leva aproximadamente uma hora, excluindo o tempo inicial de criação do serviço.

Mesmo que você trabalhe apenas no código do comprador ou do vendedor, é útil configurar o fluxo completo no seu ambiente local para entender melhor como as pilhas do comprador e do vendedor funcionam uma com a outra. Ao configurar as duas pilhas, você pode ter mais confiança ao integrar com a pilha de comprador ou vendedor de outra parte. Testar os serviços localmente também economiza custos de desenvolvimento.

Neste codelab, vamos usar o app de testes locais do B&A como um complemento para o tutorial.

O app de testes locais complementar hospeda vários recursos de compradores e vendedores usados em um leilão de B&A. O app também oferece uma interface em http://localhost:3000, onde é possível simular várias configurações de leilão.

2. Configuração do ambiente

2.1 Preparar uma máquina Linux

Use uma máquina local do Linux ou provisione uma VM do Linux do provedor de nuvem de sua preferência. Para melhorar o tempo de build, recomendamos pelo menos 16 núcleos e preferimos 32 ou mais.

Vamos carregar uma página HTML de http://localhost:3000 desta máquina. Se a VM não oferecer uma GUI, verifique se a porta 3000 está acessível para a máquina local para que você possa se conectar a ela.

2.2 Instalar o Docker

Usamos o Docker para executar os serviços e o aplicativo de teste local.

Vamos usar o script de conveniência para instalar o Docker em um ambiente de teste.

# Install Docker
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh

# Set up sudo-less Docker
> sudo groupadd docker
> sudo usermod -aG docker $USER
> newgrp docker

# Test
> docker run hello-world

Aviso: com a configuração sem sudo, o grupo do Docker concede privilégios de nível raiz ao usuário. Leia o guia do Docker sem sudo para saber mais.

2.3 Iniciar o app complementar de testes locais

O app complementar oferece recursos, como scripts de lances/pontuações simulados e endpoints simulados de BYOS de K/V. O app precisa ser iniciado antes da execução dos serviços de B&A para que os recursos possam ser carregados nos serviços.

Role para baixo o repositório do app de teste local:

git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git

Na raiz do repositório, execute o script de configuração:

./setup

O script de configuração vai criar a rede Docker ba-dev, gerar certificados SSL e criar a imagem do app de teste.

Depois que o build for concluído, execute o script de início:

./start

3. Criar e executar testes de usabilidade localmente

3.1 Puxar para baixo os serviços de B&A

Vamos executar dois conjuntos de serviços de B&A na mesma máquina, então vamos extrair o repositório em duas pastas diferentes.

Conjunto A:

Faça o download do repositório de perguntas e respostas:

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-a

Conjunto B

Faça o download do repositório de perguntas e respostas:

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-b
`

3.2 Criar os serviços

Na pasta raiz de cada pasta de B&A, execute o comando abaixo para criar os quatro serviços:

production/packaging/build_and_test_all_in_docker \
  --service-path bidding_service \
  --service-path auction_service \
  --service-path buyer_frontend_service \
  --service-path seller_frontend_service \
  --platform gcp \
  --instance local \
  --no-precommit \
  --no-tests \
  --build-flavor non_prod \
  --gcp-skip-image-upload

O comando acima vai criar uma instância local do build de desenvolvimento (non_prod) para o Google Cloud Platform (gcp) de todos os quatro serviços. Atualize a flag --platform para o provedor de nuvem de sua escolha, se necessário. Para saber mais sobre as flags de build, consulte o arquivo build_and_test_all_docker.

O build inicial pode levar 2 horas se você estiver usando uma máquina de 64 núcleos, e o tempo de build varia linearmente de acordo com a contagem de núcleos. Se você estiver usando uma máquina de 32 núcleos, o processo pode levar 4 horas. Se você estiver usando uma máquina de 16 núcleos, o processo pode levar 8 horas.

Os builds subsequentes usam o cache, e cada um deles leva de 5 a 20 minutos.

Quadrinho relevante do xkcd:

Mostra dois programadores relaxando no escritório, o que faz com que o gerente diga para eles voltarem ao trabalho. Os trabalhadores dizem que o código está sendo compilado, e o gerente concorda com isso. O autor da tirinha considera que essa é a desculpa legítima número um para relaxar.

Conheci Randall Munroe, do xkcd, enquanto escrevia este codelab e contei a ele que adicionei esta tirinha aqui.

3.3 Executar os serviços

Para nossos testes, vamos executar oito serviços (quatro por pilha). Cada comando é configurado para usar os recursos fornecidos pelo app de teste local. É altamente recomendável usar um gerenciador de janelas, como tmux.

Abra pelo menos oito janelas de terminal adicionais e execute os comandos a seguir em cada sessão.

O servidor do app de teste local já precisa estar em execução em um processo separado, já que os scripts de lances e pontuação serão veiculados pelo app.

3.3.1 Comandos do conjunto A

Serviço

Comando

Serviço de lances DSP-X

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.101 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5003/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-X Serviço BFE

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.102 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5003/kv \

BIDDING_SERVER_ADDR=192.168.84.101:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA Serviço de leilão

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.103 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6002/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA Serviço SFE

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.104 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6002" \

AUCTION_SERVER_ADDR="192.168.84.103:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6002/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 Comandos do conjunto B

Serviço

Comando

Serviço de lances DSP-X

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.201 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5004/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-X Serviço BFE

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.202 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5004/kv \

BIDDING_SERVER_ADDR=192.168.84.201:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA Serviço de leilão

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.203 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6003/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA Serviço SFE

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.204 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6003" \

AUCTION_SERVER_ADDR="192.168.84.203:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6003/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 Variáveis de ambiente para os scripts de início locais

As variáveis de ambiente a seguir podem ser usadas para controlar o comportamento de inicialização.

Variável de ambiente

Disponibilidade

Descrição

DOCKER_RUN_ARGS_STRING

Todos os serviços

Flags a serem definidas para o comando docker

SKIP_TLS_VERIFICATION

Todos os serviços

Ao testar na máquina local, talvez seja necessário usar um certificado autoassinado que falha na verificação de pares SSL do curl. A flag desativa a verificação de peer e a verificação de nome de host SSL.

O valor padrão é false.

PS_VERBOSITY

Todos os serviços

O nível dos registros de serviço. Níveis mais altos fornecem mais registros. 0 é o menor e 10 é o maior. O valor padrão é 10.

BIDDING_PORT

Serviço de lances

Porta do serviço de lances. O valor padrão é 50057.

BIDDING_JS_URL

Serviço de lances

URL da lógica de lances

EGRESS_SCHEMA_URL

Serviço de lances

Saída de dados para treinamento de modelos

INFERENCE_ARGS

Serviço de lances

Argumentos para inferência de lances

BFE_PORT

Serviço BFE

Porta do serviço BFE. O valor padrão é 50051.

BUYER_KV_SERVER_ADDR

Serviço BFE

Endereço K/V BYOS do comprador

BUYER_TKV_V2_SERVER_ADDR

Serviço BFE

Endereço K/V TEE do comprador

BIDDING_SERVER_ADDR

Serviço BFE

Endereço do serviço de lances do comprador

AUCTION_PORT

Serviço de leilão

Porta do serviço de leilão. O valor padrão é 50061.

AUCTION_JS_URL

Serviço de leilão

URL da lógica de pontuação

BUYER_REPORT_WIN_URL

Serviço de leilão

URL do relatório de vitória do comprador

BUYER_REPORT_WIN_SCRIPT

Serviço de leilão

Script do relatório de vitória do comprador

BUYER_PAS_REPORT_WIN_SCRIPT

Serviço de leilão

Script de relatório de vitória do comprador para PAS

SFE_PORT

Serviço SFE

Porta do serviço SFE. O valor padrão é 50053.

AUCTION_SERVER_ADDR

Serviço SFE

Endereço do serviço de leilão do vendedor

KEY_VALUE_SIGNALS_ADDR

Serviço SFE

Endereço de K/V BYOS do vendedor

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

Serviço SFE

Endereço de K/V do TEE do vendedor

SELLER_ORIGIN_DOMAIN

Serviço SFE

Origem do vendedor

BUYER_SERVER_ADDRS_JSON

Serviço SFE

Endereços BFE do comprador

4. Testar com o Secure Invoke na linha de comando

4.1 Testes de SFE

Também é possível usar a ferramenta Secure Invoke, incluída no pacote de serviços de B&A, para chamar os serviços diretamente da linha de comando.

4.1.2 Payload SelectAd do SFE

A seguinte solicitação JSON foi preenchida com a configuração de leilão de B&A de vendedor único do SSP-BA:

{
  "auction_config": {
    "seller": "https://localhost:6002",
    "auction_signals": "{\"testKey\":\"someValue\"}",
    "seller_signals": "{\"testKey\":\"someValue\"}",
    "buyer_list": [
      "https://localhost:5003",
      "https://localhost:5004"
    ],
    "per_buyer_config": {
      "https://localhost:5003": { "buyer_signals": "{\"testKey\":\"someValue\"}" },
      "https://localhost:5004": { "buyer_signals": "{\"testKey\":\"someValue\"}" }
    }
  },
  "raw_protected_audience_input": {
    "publisher_name": "http://localhost:4001",
    "generation_id": "1210718540",
    "enable_debug_reporting": true,
    "raw_buyer_input": {
      "https://localhost:5003": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      },
      "https://localhost:5004": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      }
    }
  }
}

Salve o arquivo como sfe-test.json na pasta raiz do repositório de serviços do Set A. O script de build do B&A vai copiar os arquivos na pasta raiz do repositório para a pasta /src/workspace da imagem do Docker.

4.1.2 Chamar a SFE com o Secure Invoke

Execute o seguinte comando na pasta raiz do repositório de serviços de B&A:

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=sfe \
  -input_file=/src/workspace/sfe-test.json \
  -host_addr=192.168.84.104:50053 \
  -client_ip=192.168.84.100 \
  -insecure=true

Se as pilhas de B&A estiverem configuradas corretamente, você vai receber a seguinte resposta de sucesso:

{"adRenderUrl":"https://localhost:5004/ad.html","interestGroupName":"dsp-x-demo","interestGroupOwner":"https://localhost:5004","score":39,"bid":39,"biddingGroups":{"https://localhost:5003":{"index":[0]},"https://localhost:5004":{"index":[0]}}}

4.2 Teste de BFE

4.2.1 Solicitação de GetBids do BFE

{
  "buyer_input": {
    "interest_groups": {
      "name": "dsp-x-demo",
      "ad_render_ids": ["1234"],
      "bidding_signals_keys": ["demo-key"],
      "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" }
    }
  },
  "auction_signals": "{\"testKey\":\"someValue\"}",
  "buyer_signals": "{\"testKey\":\"someValue\"}",
  "seller": "https://localhost:6002",
  "publisher_name": "http://localhost:4001",
  "enable_debug_reporting": true,
  "client_type": "CLIENT_TYPE_BROWSER"
}

Salve o arquivo como bfe-test.json na pasta raiz do repositório de serviços de B&A.

4.2.2 Chamar BFE com o Secure Invoke

Execute o seguinte comando na pasta raiz do repositório de serviços de B&A:

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=bfe \
  -input_file="/src/workspace/bfe-test.json" \
  -host_addr="192.168.84.102:50051" \
  -client_ip=192.168.84.100 \
  -insecure=true

Se as pilhas de B&A estiverem configuradas corretamente, o BFE vai retornar a seguinte resposta:

{"bids":[{"bid":6,"render":"https://localhost:5003/ad.html","interestGroupName":"dsp-x-demo"}],"updateInterestGroupList":{}}

4.3 Verificar os registros do SFE

Acesse o terminal e verifique os registros do SFE. Vamos analisar alguns dos registros importantes na saída.

4.3.1 Payload criptografado da solicitação SelectAd

Nesta saída de registro do SFE, encontramos o payload criptografado da chamada navigator.getInterestGroupAdAuctionData(). Esse payload é gerado pelo navegador, enviado da tag para o SAS e, em seguida, encaminhado para a SFE:

I1210 21:20:47.266673      37 select_ad_reactor.cc:228] Protected auction ciphertext: AEAAIAABAAKg3OQSSLEBMR1MmJiwfOT8uef41iE+DQIvKUowsQvVcGbWZ+r17ff2r/iTbEnwqLPtpAxSTy77mi+cVV5cKjkKb4piaZnKiCDIMCyEvrQUD4+BG+HgrbUFhqiWPmQhNThvInMaHuYrXG7xushbRtvSPsVzEl6iBZcLZzD7W3CHMFK7bnJ+ufu52W6B7/8dOQ1gZW6SpwXMGNcrurTGoucbwbZRIPqCcbZk76J1gB69wrDYRo1wQ6jmBleLM36nulxbEj/sHhpQIgr895aKqEGQ3Fy+/HHPTO+zHphcX44YeF6mZ/I+WxZTDxCi1x27nI4yvzC8vI4a/giJN5XUlJZGb/fMrj3/Qly+gwJ8lbxdX+4GWTooDoS4MTtiBpJqh9wkIQ5XwfO54p8Kv6j/tk+51hOfVkOdtGwX0LvVrWT9PiJOJHa23nZ1fLg/22mTe05xdbR3WVeA+xiO9YwF4ozyCYDRUkDyWB/3k9RuaaT9H5S1szVpuOuD2nYSRpT9svmpfG4kipiS6BTPZPX2whDlukpuuoFgdiDtH6cFShNhZ5C47R0ayAvaZ1QSpOZMWfA6pdl4nhvNLpOKesKY/KFDEBzpUXRDsQWsfvmdqFl1mCeX9rOrEc9rodYVLXXhM8GPycehHmvqkccTBW6kipOQlmnSdIYaFmtWSFpUrzxajGkct3mZdTjVjOf...

4.3.2 Payload descriptografado

Nesta saída, encontramos o payload descriptografado da chamada navigator.getInterestGroupAdAuctionData():

I1210 21:20:47.267590      37 select_ad_reactor.cc:347]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Decoded BuyerInput:
https://localhost:5003 : {interest_groups { name: "dsp-x-demo" bidding_signals_keys: "demo-key" browser_signals { join_count: 1 recency: 7 prev_wins: "[]" } }}

4.3.3 Solicitação de GetBids para o BFE

A solicitação GetBids é enviada da SFE para a BFE:

I1210 21:20:47.267710      37 select_ad_reactor.cc:751]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Getting bid from a BFE
I1210 21:20:47.267729      37 buyer_frontend_async_client.cc:52] Raw request:
buyer_input {
  interest_groups {
    name: "dsp-x-demo"
    bidding_signals_keys: "demo-key"
    browser_signals {
      join_count: 1
      recency: 7
      prev_wins: "[]"
    }
  }
}
auction_signals: "{\"testKey\":\"someValue\"}"
buyer_signals: "{\"testKey\": \"someValue\"}"
seller: "https://localhost:6002"
publisher_name: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
client_type: CLIENT_TYPE_BROWSER

4.3.4 Resposta GetBids do BFE

O BFE responde com o lance:

I1210 21:20:47.282549      41 select_ad_reactor.cc:856]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Received response from a BFE ...
I1210 21:20:47.282552      41 select_ad_reactor.cc:859]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252)
GetBidsResponse:
bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
}
update_interest_group_list {
}

4.3.5 Solicitação ScoreAds para o serviço de leilão

Depois que os lances são recebidos, a chamada ScoreAds é feita pelo SFE para o serviço de leilão para cada lance:

I1210 21:20:47.287898      18 select_ad_reactor.cc:1280]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) ScoreAdsRawRequest:
ad_bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  interest_group_owner: "https://localhost:5003"
  join_count: 1
  k_anon_status: true
}
seller_signals: "{\"testKey\":\"someValue\"}"
auction_signals: "{\"testKey\":\"someValue\"}"
scoring_signals: "{\"renderUrls\":{\"https://localhost:5003/ad.html\":[1,2,3],\"https://localhost:5004/ad.html\":[1,2,3]}}"
publisher_hostname: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
per_buyer_signals {
  key: "https://localhost:5003"
  value: "{\"testKey\": \"someValue\"}"
}
per_buyer_signals {
  key: "https://localhost:5004"
  value: "{\"testKey\": \"someValue\"}"
}
seller: "https://localhost:6002"

4.3.6 Resposta ScoreAds do serviço de leilão

O serviço de leilão do vendedor responde com a pontuação de atratividade:

I1210 21:20:47.298029      33 default_async_grpc_client.h:134] Decrypting the response ...
I1210 21:20:47.298100      33 default_async_grpc_client.h:152] Decryption/decoding of response succeeded: ad_score {
  desirability: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  buyer_bid: 9
  interest_group_owner: "https://localhost:5003"
  win_reporting_urls {
    top_level_seller_reporting_urls {
    }
  }
  ad_type: AD_TYPE_PROTECTED_AUDIENCE_AD
}

4.3.7 Resposta SelectAd da SFE

A resposta SelectAd do SFE é criptografada e enviada ao SAS:

I1210 21:20:47.298428      33 select_ad_reactor.cc:1413]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Encrypted SelectAdResponse:
auction_result_ciphertext: "\023\233\252\321\000\331M\327\216\201S\332kl?\322\255\247\312\375h\007W\367\016\366FR\364\275\377\326\027h\204\203\265\t\271-\333\266\tH\342\033F\001k\211C\026V\013\271\255(\236\273\353\260\275\007\346\027\340?\005|\235S\244\265\2563U\246\322\177%\200/\3175\034 \020\024\362\345\3263\356F.s\261\005\231\262Z\000\330x\0230\335>\"\217\254\010\254\330>\206\007\274\235\037`\370W\032\207\356\367\206\026\341.i\"$\370\367\2554i\247\354\304e\306\2466S\337\321w\327+!\316\035:\002\231\246\362\366qm\211\000\013\343\345\224{\365py\361\374\316\202\217-\244\302\331\216D\025W#.\304nH\235\315\311<#\342\344\324\257\354\2441\251\312\320\226\342\021\377>3`\347/\350\254h\306\273\023\365\340@\321\2412\254\323\213\0137,\013n\220|\211\323/\030)\314\263\223\355>\254\312aa`!\375\335\023Z\234p\206\037\001\355\261{$\025+\341\275\327Ny\342\342\264=\376\2138\224\026\2058\251\020\202\245*46\023\307)K\342\364k<\2104r\247\034\216}\034\001\374\215\363\210\026\275\371S>\031;f.b\260\363\257.\255\023I\341A\237*_T\355\262\005\344L\336D%\327\267@\302$\300\340\203c\350|\337>C\275c\260\202o\315xp\260\257\241\305U\nK\033\274L6\025\350\373a:\253\212&>p\210\215\017&^\327\005_\037\020\212\362\351\341\231@g\372\0037\275b:)\207\303d\243?\261O\266\343\214\200\004\247\372\022S\326\200\037\330\252r\257+e\273[\231\202\3625{\330\213\240\370\245\\\214\350/\313\ty/\004\313\0304k\223\354\374\305\233\264\224K\344\241\251\322?\323q6\314D\027\200\203\035]\023O\306\230?\203\237:\254\305\265\332\330\2641l\322\020\022\330O-\242\207>Q\364_{F\235\353tk\207\035\205\005\221\373\207\0143\035\014\322\240H\220\347%\262f\347\017\352\273\265\231\014\204\r\312\254z\000\340&\354\222\323\245\356\217(i\246"

5. Testar com o app de teste local no navegador

5.1 Abra o Chrome

Leia o artigo do Chromium sobre como iniciar o Chrome pela linha de comando e inicie-o com as seguintes flags:

google-chrome --enable-privacy-sandbox-ads-apis --disable-features=EnforcePrivacySandboxAttestations,FledgeEnforceKAnonymity --enable-features=FledgeBiddingAndAuctionServerAPI,FledgeBiddingAndAuctionServer:FledgeBiddingAndAuctionKeyURL/https%3A%2F%2Fstorage.googleapis.com%2Fba-test-buyer%2Fcoordinator-test-key.json 

A flag está definida para carregar a chave de coordenador simulado que hospedamos em https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json

Importante: saia completamente de todas as instâncias do Chrome antes de abri-lo na linha de comando com as flags B&A. Para sair de todos os processos do Chrome, tente executar ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 na linha de comando.

5.2 Acessar a interface do app de teste local

A interface do app pode ser encontrada em http://localhost:3000 na instância do navegador Chrome aberta com as flags. O endereço exato que você visita pode ser diferente se você estiver usando uma VM com um nome de host diferente.

Uma captura de tela do app de teste local sendo visitado em um navegador

Na linha de cima do app, o painel "Controls" contém os botões para simular diferentes configurações de leilão. Os outros dois painéis contêm iframes dos sites do anunciante e do editor.

Quando você clica no botão "Carregar tags de DSP" no iframe da página do anunciante, um script de cada DSP é adicionado à página. Esses scripts adicionam o usuário a grupos de interesse. Abra o Chrome DevTools e acesse "Application / Storage / Interest Groups" para examinar os grupos de interesse unidos pelas tags do DSP:

Captura de tela dos grupos de interesse no Chrome DevTools

Em seguida, clique nos botões no painel "Controles" para simular vários tipos de leilão.

Um anúncio renderizado em um navegador da B&A

Se os serviços de B&A e o app de testes locais estiverem configurados corretamente, o anúncio anterior será renderizado no painel "Iframe do site do editor".

5.3 Configuração do leilão do app de teste local

No app de teste local complementar, os seguintes participantes são hospedados, diferenciados pelo número da porta (uma porta diferente é considerada de origem cruzada):

Participante

Descrição

Porta

Advertiser

Carrega tags de DSP na página

4001

Editor

Carrega tags do SSP na página

4002

DSP-A

Comprador no dispositivo

5001

DSP-B

Comprador no dispositivo

5002

DSP-X

Comprador de B&A

5003

DSP-Y

Comprador de B&A

5004

SSP-TOP

Vendedor de nível superior

6001

SSP-OD

Vendedor somente no dispositivo

6002

SSP-BA

Vendedor somente do B&A

6003

SSP-MIX

Vendedor de modo misto

6004

Há quatro DSPs:

  • DSP-A e DSP-B participam de leilões no dispositivo
  • DSP-X e DSP-Y participam de leilões de B&A

Há quatro SSPs, e cada vendedor executa uma configuração de leilão diferente:

  • SSP-OD faz um leilão somente no dispositivo
  • SSP-BA faz um leilão somente para B&A
  • SSP-MIX faz um leilão no modo misto
  • SSP-TOP faz um leilão de vários vendedores
    • SSP-OD/BA/MIX participa como vendedor de componentes do leilão de vários vendedores de SSP-TOP

Para conferir a arquitetura completa, consulte o diagrama de design.

5.4 Configuração de lances e serviços de leilão

Neste codelab, executamos dois conjuntos de perguntas e respostas.

Definir

Serviço

Participante

Endereço de rede ba-dev

Conjunto A

Serviço de lances

DSP-X

192.168.84.101:50057

Serviço BFE

DSP-X

192.168.84.102:50051

Serviço de leilão

SSP-BA

192.168.84.103:50061

Serviço SFE

SSP-BA

192.168.84.104:50053

Conjunto B

Serviço de lances

DSP-Y

192.168.84.201:50057

Serviço BFE

DSP-Y

192.168.84.202:50051

Serviço de leilão

SSP-MIX

192.168.84.203:50061

Serviço SFE

SSP-MIX

192.168.84.204:50053

App

App de teste local

Todos

https://192.168.84.100:PORT

  • No conjunto A, os serviços do comprador são usados por DSP-X e os serviços do vendedor são usados por SSP-BA
  • No conjunto B, os serviços do comprador são usados por DSP-Y e os serviços do vendedor são usados por SSP-MIX

Para a comunicação entre o app de teste local e os serviços de B&A, é usada uma rede de ponte do Docker. A rede de ponte ba-dev é criada pelo script de configuração do app de teste local. Um endereço IP é atribuído aos serviços de B&A na sub-rede de 192.168.84.0.

Por exemplo, quando você chama o SFE do Set A no aplicativo, o endereço de rede de 192.168.84.104:50053 é usado. Quando você carrega o script de lances simulados do DSP-X para o BFE, o https://192.168.84.100:5003/generate-bid.js é usado.

6. Conclusão

Esperamos que você já tenha se familiarizado com a execução da pilha de serviços de B&A localmente na sua máquina e entendido melhor como os serviços se comunicam entre si.

6.1. Suporte técnico

6.2 Saiba mais