--- /dev/null
+// 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