srvrecs_test.cc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <config.h>
  2. #include <apt-pkg/srvrec.h>
  3. #include <string>
  4. #include <iostream>
  5. #include <gtest/gtest.h>
  6. TEST(SrvRecTest, PopFromSrvRecs)
  7. {
  8. // the PopFromSrvRecs() is using a random number so we must
  9. // run it a bunch of times to ensure we are not fooled by randomness
  10. std::set<std::string> selected;
  11. for(size_t i = 0; i < 100; ++i)
  12. {
  13. std::vector<SrvRec> Meep;
  14. Meep.emplace_back("foo", 20, 0, 80);
  15. Meep.emplace_back("bar", 20, 0, 80);
  16. Meep.emplace_back("baz", 30, 0, 80);
  17. EXPECT_EQ(Meep.size(), 3);
  18. SrvRec const result = PopFromSrvRecs(Meep);
  19. selected.insert(result.target);
  20. // ensure that pop removed one element
  21. EXPECT_EQ(Meep.size(), 2);
  22. EXPECT_NE(result.target, "baz");
  23. SrvRec const result2 = PopFromSrvRecs(Meep);
  24. EXPECT_NE(result.target, result2.target);
  25. EXPECT_NE(result2.target, "baz");
  26. EXPECT_EQ(Meep.size(), 1);
  27. SrvRec const result3 = PopFromSrvRecs(Meep);
  28. EXPECT_EQ(result3.target, "baz");
  29. EXPECT_TRUE(Meep.empty());
  30. }
  31. // ensure that after enough runs we end up with both selected
  32. EXPECT_EQ(selected.size(), 2);
  33. }