1aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// Copyright (C) 2014 Google Inc.
2aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com//
3aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// Licensed under the Apache License, Version 2.0 (the "License");
4aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// you may not use this file except in compliance with the License.
5aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// You may obtain a copy of the License at
6aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com//
7aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// http://www.apache.org/licenses/LICENSE-2.0
8aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com//
9aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// Unless required by applicable law or agreed to in writing, software
10aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// distributed under the License is distributed on an "AS IS" BASIS,
11aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// See the License for the specific language governing permissions and
13aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com// limitations under the License.
14aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1517471f7b69a94f92480650b06721e698204be3c0roubert@google.com#include "ondemand_supply_task.h"
16aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
17aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <libaddressinput/callback.h>
18aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <libaddressinput/null_storage.h>
199693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com#include <libaddressinput/supplier.h>
20aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <libaddressinput/util/basictypes.h>
21aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <libaddressinput/util/scoped_ptr.h>
22aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
23aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <cstddef>
248f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com#include <cstring>
25aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <map>
26aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <string>
27aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <utility>
28aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
29aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include <gtest/gtest.h>
30aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
31aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include "lookup_key.h"
328466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com#include "mock_source.h"
33aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include "retriever.h"
34aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com#include "rule.h"
35aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
36aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comnamespace {
37aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
38aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::BuildCallback;
39aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::LookupKey;
408466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.comusing i18n::addressinput::MockSource;
41aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::NullStorage;
4217471f7b69a94f92480650b06721e698204be3c0roubert@google.comusing i18n::addressinput::OndemandSupplyTask;
43aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::Retriever;
44aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::Rule;
45aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.comusing i18n::addressinput::scoped_ptr;
469693f6426f3500db74dcfc766a130a747a571e5eroubert@google.comusing i18n::addressinput::Supplier;
47aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
4817471f7b69a94f92480650b06721e698204be3c0roubert@google.comclass OndemandSupplyTaskTest : public testing::Test {
49aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com protected:
5017471f7b69a94f92480650b06721e698204be3c0roubert@google.com  OndemandSupplyTaskTest()
51a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com      : success_(true),
52a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com        lookup_key_(),
53a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com        rule_(),
54a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com        called_(false),
558466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com        source_(new MockSource),
56aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com        rule_cache_(),
578466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com        retriever_(new Retriever(source_, new NullStorage)),
5817471f7b69a94f92480650b06721e698204be3c0roubert@google.com        supplied_(BuildCallback(this, &OndemandSupplyTaskTest::Supplied)),
5917471f7b69a94f92480650b06721e698204be3c0roubert@google.com        task_(new OndemandSupplyTask(lookup_key_, &rule_cache_, *supplied_)) {}
60aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
6117471f7b69a94f92480650b06721e698204be3c0roubert@google.com  virtual ~OndemandSupplyTaskTest() {
62aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com    for (std::map<std::string, const Rule*>::const_iterator
63aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com         it = rule_cache_.begin(); it != rule_cache_.end(); ++it) {
64aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      delete it->second;
65aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com    }
66aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  }
67aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
68000aa6dbb70273ccefa77a5d4cd1a400939a2666roubert@google.com  void Queue(const std::string& key) { task_->Queue(key); }
698f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com
70000aa6dbb70273ccefa77a5d4cd1a400939a2666roubert@google.com  void Retrieve() { task_->Retrieve(*retriever_); }
71aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
728466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  bool success_;  // Expected status from MockSource.
73aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  LookupKey lookup_key_;  // Stub.
748f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  const Rule* rule_[arraysize(LookupKey::kHierarchy)];
75aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  bool called_;
768466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  MockSource* const source_;
77aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
78aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com private:
799693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com  void Supplied(bool success,
809693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com                const LookupKey& lookup_key,
819693f6426f3500db74dcfc766a130a747a571e5eroubert@google.com                const Supplier::RuleHierarchy& hierarchy) {
82aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com    ASSERT_EQ(success_, success);
83aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com    ASSERT_EQ(&lookup_key_, &lookup_key);
8417471f7b69a94f92480650b06721e698204be3c0roubert@google.com    ASSERT_EQ(&task_->hierarchy_, &hierarchy);
8517471f7b69a94f92480650b06721e698204be3c0roubert@google.com    std::memcpy(rule_, hierarchy.rule, sizeof rule_);
86aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com    called_ = true;
87aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  }
88aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
89a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com  std::map<std::string, const Rule*> rule_cache_;
90a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com  const scoped_ptr<Retriever> retriever_;
91a135825cf2f13931bb067f0f11b6c66dd203e961roubert@google.com  const scoped_ptr<const Supplier::Callback> supplied_;
9217471f7b69a94f92480650b06721e698204be3c0roubert@google.com  OndemandSupplyTask* const task_;
938f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com
9417471f7b69a94f92480650b06721e698204be3c0roubert@google.com  DISALLOW_COPY_AND_ASSIGN(OndemandSupplyTaskTest);
95aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com};
96aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
9717471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, Empty) {
98aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
99aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
1008f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[0] == NULL);
1018f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1] == NULL);
1028f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2] == NULL);
1038f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3] == NULL);
104aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
105aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
10617471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, Invalid) {
1078f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
108aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
109aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  success_ = false;
110aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
111aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
112aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
113aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
114aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
11517471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, Valid) {
1168466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
117aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1188f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
119aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
120aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
121aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
1228f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[0] != NULL);
1238f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1] == NULL);
1248f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2] == NULL);
1258f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3] == NULL);
126aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1278f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA", rule_[0]->GetId());
128aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
129aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  // All rules on the COUNTRY level inherit from the default rule.
1308f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_FALSE(rule_[0]->GetFormat().empty());
1318f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_FALSE(rule_[0]->GetRequired().empty());
1328f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[0]->GetPostalCodeMatcher() == NULL);
133aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
134aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
13517471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, ValidHierarchy) {
1368466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(
137aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
1388466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(
139aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      std::make_pair("data/XA/aa", "{\"id\":\"data/XA/aa\"}"));
1408466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(
141aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      std::make_pair("data/XA/aa/bb", "{\"id\":\"data/XA/aa/bb\"}"));
1428466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(
143aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      std::make_pair("data/XA/aa/bb/cc", "{\"id\":\"data/XA/aa/bb/cc\"}"));
144aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1458f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
1468f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa");
1478f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa/bb");
1488f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa/bb/cc");
149aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
150aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
151aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
1528f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[0] != NULL);
1538f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1] != NULL);
1548f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2] != NULL);
1558f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3] != NULL);
156aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1578f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA", rule_[0]->GetId());
1588f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA/aa", rule_[1]->GetId());
1598f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA/aa/bb", rule_[2]->GetId());
1608f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA/aa/bb/cc", rule_[3]->GetId());
161aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
162aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  // All rules on the COUNTRY level inherit from the default rule.
1638f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_FALSE(rule_[0]->GetFormat().empty());
1648f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_FALSE(rule_[0]->GetRequired().empty());
165aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
166aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  // Only rules on the COUNTRY level inherit from the default rule.
1678f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1]->GetFormat().empty());
1688f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1]->GetRequired().empty());
1698f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2]->GetFormat().empty());
1708f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2]->GetRequired().empty());
1718f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3]->GetFormat().empty());
1728f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3]->GetRequired().empty());
173aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
174aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
17517471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, InvalidJson1) {
1768466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA", ":"));
177aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
178aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  success_ = false;
179aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1808f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
181aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
182aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
183aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
184aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
185aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
18617471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, InvalidJson2) {
1878466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
1888466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA/aa", ":"));
189aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
190aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  success_ = false;
191aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
1928f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
1938f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa");
194aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
195aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
196aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
197aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
198aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
19917471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, EmptyJsonJustMeansServerKnowsNothingAboutKey) {
2008466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
2018466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(std::make_pair("data/XA/aa", "{}"));
202aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
2038f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
2048f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa");
205aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
206aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
207aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
2088f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[0] != NULL);
2098f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[1] == NULL);
2108f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[2] == NULL);
2118f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_TRUE(rule_[3] == NULL);
212aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
2138f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  EXPECT_EQ("data/XA", rule_[0]->GetId());
214aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
215aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
21617471f7b69a94f92480650b06721e698204be3c0roubert@google.comTEST_F(OndemandSupplyTaskTest, IfCountryFailsAllFails) {
2178466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  source_->data_.insert(
218aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com      std::make_pair("data/XA/aa", "{\"id\":\"data/XA/aa\"}"));
219aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
220aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  success_ = false;
221aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
2228f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA");
2238f683c2f40fc78ae8efbdcd1e3b10448640d46a2roubert@google.com  Queue("data/XA/aa");
224aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
225aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_NO_FATAL_FAILURE(Retrieve());
226aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com  ASSERT_TRUE(called_);
227aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}
228aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com
229aa04d02df8665c81b05c057ddfd22d6ef8606405roubert@google.com}  // namespace
230