configuration_test.cc 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #include <config.h>
  2. #include <apt-pkg/configuration.h>
  3. #include <string>
  4. #include <vector>
  5. #include <gtest/gtest.h>
  6. //FIXME: Test for configuration file parsing;
  7. // currently only integration/ tests test them implicitly
  8. TEST(ConfigurationTest,Lists)
  9. {
  10. Configuration Cnf;
  11. Cnf.Set("APT::Keep-Fds::",28);
  12. Cnf.Set("APT::Keep-Fds::",17);
  13. Cnf.Set("APT::Keep-Fds::2",47);
  14. Cnf.Set("APT::Keep-Fds::","broken");
  15. std::vector<std::string> fds = Cnf.FindVector("APT::Keep-Fds");
  16. ASSERT_EQ(4, fds.size());
  17. EXPECT_EQ("28", fds[0]);
  18. EXPECT_EQ("17", fds[1]);
  19. EXPECT_EQ("47", fds[2]);
  20. EXPECT_EQ("broken", fds[3]);
  21. EXPECT_TRUE(Cnf.Exists("APT::Keep-Fds::2"));
  22. EXPECT_EQ("47", Cnf.Find("APT::Keep-Fds::2"));
  23. EXPECT_EQ(47, Cnf.FindI("APT::Keep-Fds::2"));
  24. EXPECT_FALSE(Cnf.Exists("APT::Keep-Fds::3"));
  25. EXPECT_EQ("", Cnf.Find("APT::Keep-Fds::3"));
  26. EXPECT_EQ(56, Cnf.FindI("APT::Keep-Fds::3", 56));
  27. EXPECT_EQ("not-set", Cnf.Find("APT::Keep-Fds::3", "not-set"));
  28. Cnf.Clear("APT::Keep-Fds::2");
  29. EXPECT_TRUE(Cnf.Exists("APT::Keep-Fds::2"));
  30. fds = Cnf.FindVector("APT::Keep-Fds");
  31. ASSERT_EQ(4, fds.size());
  32. EXPECT_EQ("28", fds[0]);
  33. EXPECT_EQ("17", fds[1]);
  34. EXPECT_EQ("", fds[2]);
  35. EXPECT_EQ("broken", fds[3]);
  36. Cnf.Clear("APT::Keep-Fds",28);
  37. fds = Cnf.FindVector("APT::Keep-Fds");
  38. ASSERT_EQ(3, fds.size());
  39. EXPECT_EQ("17", fds[0]);
  40. EXPECT_EQ("", fds[1]);
  41. EXPECT_EQ("broken", fds[2]);
  42. Cnf.Clear("APT::Keep-Fds","");
  43. EXPECT_FALSE(Cnf.Exists("APT::Keep-Fds::2"));
  44. Cnf.Clear("APT::Keep-Fds",17);
  45. Cnf.Clear("APT::Keep-Fds","broken");
  46. fds = Cnf.FindVector("APT::Keep-Fds");
  47. EXPECT_TRUE(fds.empty());
  48. Cnf.Set("APT::Keep-Fds::",21);
  49. Cnf.Set("APT::Keep-Fds::",42);
  50. fds = Cnf.FindVector("APT::Keep-Fds");
  51. ASSERT_EQ(2, fds.size());
  52. EXPECT_EQ("21", fds[0]);
  53. EXPECT_EQ("42", fds[1]);
  54. Cnf.Clear("APT::Keep-Fds");
  55. fds = Cnf.FindVector("APT::Keep-Fds");
  56. EXPECT_TRUE(fds.empty());
  57. }
  58. TEST(ConfigurationTest,Integers)
  59. {
  60. Configuration Cnf;
  61. Cnf.CndSet("APT::Version", 42);
  62. Cnf.CndSet("APT::Version", "66");
  63. EXPECT_EQ("42", Cnf.Find("APT::Version"));
  64. EXPECT_EQ(42, Cnf.FindI("APT::Version"));
  65. EXPECT_EQ("42", Cnf.Find("APT::Version", "33"));
  66. EXPECT_EQ(42, Cnf.FindI("APT::Version", 33));
  67. EXPECT_EQ("33", Cnf.Find("APT2::Version", "33"));
  68. EXPECT_EQ(33, Cnf.FindI("APT2::Version", 33));
  69. }
  70. TEST(ConfigurationTest,DirsAndFiles)
  71. {
  72. Configuration Cnf;
  73. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  74. EXPECT_EQ("", Cnf.FindFile("Dir::Aptitude::State"));
  75. Cnf.Set("Dir", "/srv/sid");
  76. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  77. Cnf.Set("Dir::State", "var/lib/apt");
  78. Cnf.Set("Dir::Aptitude::State", "var/lib/aptitude");
  79. EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
  80. EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
  81. Cnf.Set("RootDir", "/");
  82. EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
  83. EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
  84. Cnf.Set("RootDir", "//./////.////");
  85. EXPECT_EQ("/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
  86. EXPECT_EQ("/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
  87. Cnf.Set("RootDir", "/rootdir");
  88. EXPECT_EQ("/rootdir/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
  89. EXPECT_EQ("/rootdir/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
  90. Cnf.Set("RootDir", "/rootdir/");
  91. EXPECT_EQ("/rootdir/srv/sid/var/lib/apt", Cnf.FindFile("Dir::State"));
  92. EXPECT_EQ("/rootdir/srv/sid/var/lib/aptitude", Cnf.FindFile("Dir::Aptitude::State"));
  93. Cnf.Set("Dir::State", "/dev/null");
  94. Cnf.Set("Dir::State::lists", "lists/");
  95. EXPECT_EQ("/rootdir/dev/null", Cnf.FindDir("Dir::State"));
  96. EXPECT_EQ("/rootdir/dev/null", Cnf.FindDir("Dir::State::lists"));
  97. }
  98. TEST(ConfigurationTest,DevNullInPaths)
  99. {
  100. Configuration Cnf;
  101. EXPECT_EQ("", Cnf.FindFile("Dir"));
  102. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  103. EXPECT_EQ("", Cnf.FindFile("Dir::State::status"));
  104. Cnf.Set("Dir::State", "/dev/null");
  105. EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State"));
  106. Cnf.Set("Dir", "/");
  107. Cnf.Set("Dir::State::status", "status");
  108. EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State"));
  109. EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State::status"));
  110. Cnf.Set("Dir::State", "");
  111. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  112. EXPECT_EQ("/status", Cnf.FindFile("Dir::State::status"));
  113. Cnf.Set("Dir", "/dev/null");
  114. EXPECT_EQ("/dev/null", Cnf.FindFile("Dir"));
  115. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  116. EXPECT_EQ("/dev/null", Cnf.FindFile("Dir::State::status"));
  117. Cnf.Set("Dir", "/rootdir");
  118. EXPECT_EQ("/rootdir", Cnf.FindFile("Dir"));
  119. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  120. EXPECT_EQ("/rootdir/status", Cnf.FindFile("Dir::State::status"));
  121. Cnf.Set("Dir::State::status", "/foo/status");
  122. EXPECT_EQ("/rootdir", Cnf.FindFile("Dir"));
  123. EXPECT_EQ("", Cnf.FindFile("Dir::State"));
  124. EXPECT_EQ("/foo/status", Cnf.FindFile("Dir::State::status"));
  125. }
  126. TEST(ConfigurationTest,Vector)
  127. {
  128. Configuration Cnf;
  129. std::vector<std::string> vec = Cnf.FindVector("Test::Vector", "");
  130. EXPECT_EQ(0, vec.size());
  131. vec = Cnf.FindVector("Test::Vector", "foo");
  132. ASSERT_EQ(1, vec.size());
  133. EXPECT_EQ("foo", vec[0]);
  134. vec = Cnf.FindVector("Test::Vector", "foo,bar");
  135. EXPECT_EQ(2, vec.size());
  136. EXPECT_EQ("foo", vec[0]);
  137. EXPECT_EQ("bar", vec[1]);
  138. Cnf.Set("Test::Vector::", "baz");
  139. Cnf.Set("Test::Vector::", "bob");
  140. Cnf.Set("Test::Vector::", "dob");
  141. vec = Cnf.FindVector("Test::Vector");
  142. ASSERT_EQ(3, vec.size());
  143. EXPECT_EQ("baz", vec[0]);
  144. EXPECT_EQ("bob", vec[1]);
  145. EXPECT_EQ("dob", vec[2]);
  146. vec = Cnf.FindVector("Test::Vector", "foo,bar");
  147. ASSERT_EQ(3, vec.size());
  148. EXPECT_EQ("baz", vec[0]);
  149. EXPECT_EQ("bob", vec[1]);
  150. EXPECT_EQ("dob", vec[2]);
  151. Cnf.Set("Test::Vector", "abel,bravo");
  152. vec = Cnf.FindVector("Test::Vector", "foo,bar");
  153. ASSERT_EQ(2, vec.size());
  154. EXPECT_EQ("abel", vec[0]);
  155. EXPECT_EQ("bravo", vec[1]);
  156. }
  157. TEST(ConfigurationTest,Merge)
  158. {
  159. Configuration Cnf;
  160. Cnf.Set("Binary::apt::option::foo", "bar");
  161. Cnf.Set("Binary::apt::option::empty", "");
  162. Cnf.Set("option::foo", "foo");
  163. Cnf.MoveSubTree("Binary::apt", "Binary::apt2");
  164. EXPECT_FALSE(Cnf.Exists("Binary::apt::option"));
  165. EXPECT_TRUE(Cnf.Exists("option"));
  166. EXPECT_EQ("foo", Cnf.Find("option::foo"));
  167. EXPECT_EQ("bar", Cnf.Find("Binary::apt2::option::foo"));
  168. EXPECT_FALSE(Cnf.Exists("option::empty"));
  169. EXPECT_TRUE(Cnf.Exists("Binary::apt2::option::empty"));
  170. Cnf.Set("option::empty", "not");
  171. Cnf.MoveSubTree("Binary::apt2", NULL);
  172. EXPECT_FALSE(Cnf.Exists("Binary::apt2::option"));
  173. EXPECT_TRUE(Cnf.Exists("option"));
  174. EXPECT_EQ("bar", Cnf.Find("option::foo"));
  175. EXPECT_EQ("", Cnf.Find("option::empty"));
  176. }