Index: sandbox/win/src/lpc_policy_test.cc |
diff --git a/sandbox/win/src/lpc_policy_test.cc b/sandbox/win/src/lpc_policy_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a39d67dc60b9b170b7bcffd6502ebb98546c4e31 |
--- /dev/null |
+++ b/sandbox/win/src/lpc_policy_test.cc |
@@ -0,0 +1,119 @@ |
+// Copyright (c) 2011 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. |
+ |
+// These tests have been added to specifically tests issues arising from (A)LPC |
+// lock down. |
+ |
+#include <algorithm> |
+#include <cctype> |
+ |
+#include <windows.h> |
+#include <winioctl.h> |
+ |
+#include "sandbox/win/src/sandbox.h" |
+#include "sandbox/win/src/sandbox_factory.h" |
+#include "sandbox/win/src/sandbox_policy.h" |
+#include "sandbox/win/tests/common/controller.h" |
+#include "sandbox/win/tests/common/test_utils.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace sandbox { |
+ |
+// Converts LCID to std::wstring for passing to sbox tests. |
+std::wstring LcidToWString(LCID lcid) { |
+ wchar_t buff[10] = {0}; |
+ int res = swprintf_s(buff, sizeof(buff)/sizeof(buff[0]), L"%08x", lcid); |
+ if (-1 != res) { |
+ return std::wstring(buff); |
+ } |
+ return std::wstring(); |
+} |
+ |
+// Converts LANGID to std::wstring for passing to sbox tests. |
+std::wstring LangidToWString(LANGID langid) { |
+ wchar_t buff[10] = {0}; |
+ int res = swprintf_s(buff, sizeof(buff)/sizeof(buff[0]), L"%04x", langid); |
+ if (-1 != res) { |
+ return std::wstring(buff); |
+ } |
+ return std::wstring(); |
+} |
+ |
+SBOX_TESTS_COMMAND int Lpc_GetUserDefaultLangID(int argc, wchar_t **argv) { |
+ if (argc != 1) |
+ return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
+ std::wstring expected_langid_string(argv[0]); |
+ |
+ // This will cause an exception if not warmed up suitably. |
+ LANGID langid = ::GetUserDefaultLangID(); |
+ |
+ std::wstring langid_string = LangidToWString(langid); |
+ if (0 == wcsncmp(langid_string.c_str(), expected_langid_string.c_str(), 4)) { |
+ return SBOX_TEST_SUCCEEDED; |
+ } |
+ return SBOX_TEST_FAILED; |
+} |
+ |
+TEST(LpcPolicyTest, GetUserDefaultLangID) { |
+ LANGID langid = ::GetUserDefaultLangID(); |
+ std::wstring cmd = L"Lpc_GetUserDefaultLangID " + LangidToWString(langid); |
+ TestRunner runner; |
+ EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd.c_str())); |
+} |
+ |
+SBOX_TESTS_COMMAND int Lpc_GetUserDefaultLCID(int argc, wchar_t **argv) { |
+ if (argc != 1) |
+ return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
+ std::wstring expected_lcid_string(argv[0]); |
+ |
+ // This will cause an exception if not warmed up suitably. |
+ LCID lcid = ::GetUserDefaultLCID(); |
+ |
+ std::wstring lcid_string = LcidToWString(lcid); |
+ if (0 == wcsncmp(lcid_string.c_str(), expected_lcid_string.c_str(), 8)) { |
+ return SBOX_TEST_SUCCEEDED; |
+ } |
+ return SBOX_TEST_FAILED; |
+} |
+ |
+TEST(LpcPolicyTest, GetUserDefaultLCID) { |
+ LCID lcid = ::GetUserDefaultLCID(); |
+ std::wstring cmd = L"Lpc_GetUserDefaultLCID " + LcidToWString(lcid); |
+ TestRunner runner; |
+ EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd.c_str())); |
+} |
+ |
+SBOX_TESTS_COMMAND int Lpc_GetUserDefaultLocaleName(int argc, wchar_t **argv) { |
+ if (argc != 1) |
+ return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
+ std::wstring expected_locale_name(argv[0]); |
+ |
+ wchar_t locale_name[LOCALE_NAME_MAX_LENGTH] = { 0 }; |
+ // This will cause an exception if not warmed up suitably. |
+ int ret = ::GetUserDefaultLocaleName(locale_name, LOCALE_NAME_MAX_LENGTH); |
+ if (!ret) { |
+ return SBOX_TEST_FAILED; |
+ } |
+ if (!wcsnlen(locale_name, LOCALE_NAME_MAX_LENGTH)) { |
+ return SBOX_TEST_FAILED; |
+ } |
+ if (0 == wcsncmp(locale_name, |
+ expected_locale_name.c_str(), |
+ LOCALE_NAME_MAX_LENGTH)) { |
+ return SBOX_TEST_SUCCEEDED; |
+ } |
+ return SBOX_TEST_FAILED; |
+} |
+ |
+TEST(LpcPolicyTest, GetUserDefaultLocaleName) { |
+ wchar_t locale_name[LOCALE_NAME_MAX_LENGTH] = { 0 }; |
+ int ret = ::GetUserDefaultLocaleName(locale_name, LOCALE_NAME_MAX_LENGTH); |
+ EXPECT_NE(ret, 0); |
+ std::wstring cmd = L"Lpc_GetUserDefaultLocaleName " + \ |
+ std::wstring(locale_name); |
+ TestRunner runner; |
+ EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd.c_str())); |
+} |
+ |
+} // namespace sandbox |