Index: extensions/browser/api/vpn_provider/vpn_provider_apitest.cc |
diff --git a/extensions/browser/api/vpn_provider/vpn_provider_apitest.cc b/extensions/browser/api/vpn_provider/vpn_provider_apitest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab8259d9af2fd11193a6d68082ea684af0b1786f |
--- /dev/null |
+++ b/extensions/browser/api/vpn_provider/vpn_provider_apitest.cc |
@@ -0,0 +1,94 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/strings/stringprintf.h" |
+#include "extensions/browser/api/vpn_provider/vpn_provider_api.h" |
+#include "extensions/browser/api_test_utils.h" |
+#include "extensions/common/extension.h" |
+#include "extensions/common/test_util.h" |
+#include "extensions/shell/test/shell_test.h" |
+ |
+using extensions::api_test_utils::RunFunctionAndReturnSingleResult; |
+using extensions::api_test_utils::RunFunctionAndReturnError; |
+ |
+namespace extensions { |
+ |
+const char* kErrorMessages[] = {"Address CIDR sanity check failed.", |
+ "DNS server IP sanity check failed.", |
+ "Unauthorized access."}; |
+ |
+struct SetParameterTestParams { |
+ int err_index; |
+ const char* address; |
+ const char* dns_server; |
+}; |
+ |
+const SetParameterTestParams set_parameter_tests[] = { |
+ {0, "1+++", ""}, // + not allowed |
+ {0, "1", ""}, // 3 dots and separator missing |
+ {0, "1..", ""}, // A dot and separator missing |
+ {0, "1...", ""}, // Separator missing |
+ {0, "1.../", ""}, // No digit after separator in address |
+ {1, "1.../0", ""}, // Address passes sanity check, DNS incorrect |
+ {1, "1.../0", "1.../"}, // DNS is not CIDR |
+ {2, "1.../0", "1..."}, // Okay |
+ {0, ".../", "..."}, // Address has no digits |
+ {0, "0.../", "..."}, // Address has no digits post separator |
+ {1, "0.../0", "..."}, // Address passes sanity check, DNS incorrect |
+ {2, "0.../0", "...0"}, // Okay |
+ {0, "1...:::/1279abe", ""}, // : not allowed for ipv4 |
+ {0, "1.../1279abcde", ""}, // Hex not allowed after separator |
+ {0, "1...abcde/1279", ""}, // Hex not allowed in ipv4 |
+ {1, "1.../1279", ""}, // Address passes sanity check, DNS incorrect |
+ {2, "1.../1279", "1..."}, // Okay |
+ {0, "1--++", ""}, // + and - not supported |
+ {0, "1.1.1.1", ""}, // Missing separator |
+ {0, "1.1.1.1/", ""}, // No digits after separator in address |
+ {1, "1.1.1.1/1", ""}, // Address passes sanity check, DNS incorrect |
+ {2, "1.1.1.1/1", "1.1.1.1"}, // Okay |
+ {0, "1.1.1./e", "1.1.1."}, // Hex not okay in ipv4 |
+ {2, "1.1.1./0", "1.1.1."}, // Okay |
+ {1, "1.../1279", "..."}, // No digits in DNS |
+ {1, "1.../1279", "e..."}, // Hex not allowed in ipv4 |
+ {2, "1.../1279", "4..."}, // Okay |
+}; |
+ |
+class VpnProviderApiTest |
+ : public AppShellTest, |
+ public testing::WithParamInterface<const SetParameterTestParams*> {}; |
+ |
+IN_PROC_BROWSER_TEST_P(VpnProviderApiTest, SetParametersFunction) { |
+ scoped_refptr<extensions::VpnProviderSetParametersFunction> |
+ set_parameter_function( |
+ new extensions::VpnProviderSetParametersFunction()); |
+ scoped_refptr<Extension> empty_extension = test_util::CreateEmptyExtension(); |
+ |
+ set_parameter_function->set_extension(empty_extension.get()); |
+ set_parameter_function->set_has_callback(true); |
+ |
+ const std::string args = |
+ "[" |
+ " {" |
+ " \"address\": \"%s\"," |
+ " \"exclusionList\": []," |
+ " \"inclusionList\": []," |
+ " \"dnsServers\": [\"%s\"]" |
+ " }" |
+ "]"; |
+ |
+ EXPECT_EQ(kErrorMessages[GetParam()->err_index], |
+ RunFunctionAndReturnError( |
+ set_parameter_function.get(), |
+ base::StringPrintf(args.c_str(), GetParam()->address, |
+ GetParam()->dns_server), |
+ browser_context())); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ SetParameterTestParams, |
+ VpnProviderApiTest, |
+ testing::Range(&set_parameter_tests[0], |
+ &set_parameter_tests[arraysize(set_parameter_tests)])); |
+ |
+} // namespace extensions |