CSPHandler unitests 44/88144/2
authorTomasz Iwanek <t.iwanek@samsung.com>
Tue, 13 Sep 2016 13:50:50 +0000 (15:50 +0200)
committerTomasz Iwanek <t.iwanek@samsung.com>
Thu, 15 Sep 2016 08:20:33 +0000 (10:20 +0200)
Verification:
 $ /usr/bin/manifest-parser-ut/csp_handler_unittest

Change-Id: I59099d5c22b8850e60b224ef893cf4ee62a6e5a2

src/unit_tests/CMakeLists.txt
src/unit_tests/csp_handler_unittest.cc [new file with mode: 0644]
src/unit_tests/test_samples/xmls/CSPHandlerTest.InvalidNamespace/config.xml [new file with mode: 0644]
src/unit_tests/test_samples/xmls/CSPHandlerTest.Valid/config.xml [new file with mode: 0644]
src/wgt_manifest_handlers/csp_handler.cc

index d6c401417ac93c1f03f15642f26aa851394e5aa9..e505081e27c3429ba1050ccc2e572e86903af96c 100644 (file)
@@ -6,6 +6,7 @@ SET(TESTS
   content_handler_unittest
   appwidget_handler_unittest
   warp_handler_unittest
+  csp_handler_unittest
 )
 SET(DESTINATION_DIR manifest-parser-ut)
 
diff --git a/src/unit_tests/csp_handler_unittest.cc b/src/unit_tests/csp_handler_unittest.cc
new file mode 100644 (file)
index 0000000..a4b992c
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <boost/filesystem/path.hpp>
+
+#include <gtest/gtest.h>
+
+#include <manifest_parser/manifest.h>
+#include <manifest_parser/manifest_util.h>
+
+#include <memory>
+
+#include "unit_tests/base_test.h"
+#include "wgt_manifest_handlers/csp_handler.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const bf::path kXmlDirectory("/usr/share/manifest-parser-ut/test_samples/xmls");
+
+struct RegistryPolicyForCSP {
+  static std::unique_ptr<parser::ManifestHandlerRegistry> GetRegistry() {
+    using namespace wgt::parse;
+    std::unique_ptr<parser::ManifestHandlerRegistry> registry;
+    registry.reset(new parser::ManifestHandlerRegistry());
+    registry->RegisterManifestHandler(
+        new CSPHandler(CSPHandler::SecurityType::CSP));
+    registry->RegisterManifestHandler(
+        new CSPHandler(CSPHandler::SecurityType::CSP_REPORT_ONLY));
+    return registry;
+  }
+};
+
+}  // namespace
+
+namespace parser {
+
+class CSPHandlerTest : public BaseTest<RegistryPolicyForCSP> {
+  void SetUp() override {
+    BaseTest<RegistryPolicyForCSP>::SetUp();
+    std::string error;
+    bf::path xml = kXmlDirectory / GetMyName() / "config.xml";
+    std::shared_ptr<Manifest> manifest(LoadManifest(xml.string(), &error));
+    ASSERT_FALSE(!manifest);
+    SetManifest(manifest);
+  }
+};
+
+TEST_F(CSPHandlerTest, InvalidNamespace) {
+  ASSERT_TRUE(ParseAppManifest());
+  ASSERT_TRUE(ValidateAppManifest());
+  std::shared_ptr<const wgt::parse::CSPInfo> data =
+      std::static_pointer_cast<const wgt::parse::CSPInfo>(
+          GetManifestData(wgt::parse::CSPInfo::Key()));
+  ASSERT_TRUE(!data);
+  std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
+      std::static_pointer_cast<const wgt::parse::CSPInfo>(
+          GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
+  ASSERT_TRUE(!data_report_only);
+}
+
+TEST_F(CSPHandlerTest, Valid) {
+  ASSERT_TRUE(ParseAppManifest());
+  ASSERT_TRUE(ValidateAppManifest());
+  std::shared_ptr<const wgt::parse::CSPInfo> data =
+      std::static_pointer_cast<const wgt::parse::CSPInfo>(
+          GetManifestData(wgt::parse::CSPInfo::Key()));
+  ASSERT_TRUE(!!data);
+  ASSERT_EQ(data->security_rules(), "script-src 'self'");
+  std::shared_ptr<const wgt::parse::CSPInfo> data_report_only =
+      std::static_pointer_cast<const wgt::parse::CSPInfo>(
+          GetManifestData(wgt::parse::CSPInfo::Report_only_key()));
+  ASSERT_TRUE(!!data_report_only);
+  ASSERT_EQ(data_report_only->security_rules(),
+      "script-src 'self'; report-uri=\"http://example.com/report.cgi\"");
+}
+
+}  // namespace parser
diff --git a/src/unit_tests/test_samples/xmls/CSPHandlerTest.InvalidNamespace/config.xml b/src/unit_tests/test_samples/xmls/CSPHandlerTest.InvalidNamespace/config.xml
new file mode 100644 (file)
index 0000000..cc66b87
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+  <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+  <content-security-policy>script-src 'self'</content-security-policy>
+  <content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</content-security-policy-report-only>
+</widget>
diff --git a/src/unit_tests/test_samples/xmls/CSPHandlerTest.Valid/config.xml b/src/unit_tests/test_samples/xmls/CSPHandlerTest.Valid/config.xml
new file mode 100644 (file)
index 0000000..6e90b48
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets">
+  <tizen:application id="package0id.appid" package="package0id" required_version="3.0"/>
+  <tizen:content-security-policy>script-src 'self'</tizen:content-security-policy>
+  <tizen:content-security-policy>ignore me</tizen:content-security-policy>
+  <tizen:content-security-policy-report-only>script-src 'self'; report-uri="http://example.com/report.cgi"</tizen:content-security-policy-report-only>
+  <tizen:content-security-policy-report-only>ignore me</tizen:content-security-policy-report-only>
+</widget>
index 26677b3e129829c6b8ab0477696157dd6c112137..736d1205fc71e6e25050a3c936a037b12e775c45 100644 (file)
@@ -44,6 +44,10 @@ bool CSPHandler::Parse(
 
   const auto& dict = parser::GetOneOrMany(manifest.value()
       , security_key, kTizenNamespacePrefix);
+
+  if (dict.empty())
+    return true;
+
   std::string security_rules;
 
   if (dict.front()->GetString(kXmlTextKey, &security_rules)) {