public void TestProcessNoPolicyCache()
        {
            IPolicyCache policyCache = new MockPolicyCache(0);
            PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
            ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

            List<string> attachments = new List<string>();
            IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

            IContainer container;
            PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
            Assert.IsNotNull(pro);

            RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
            Assert.IsNull(routingProcessor.Process(pro));
        }
		public void Test_05_ExecuteAction_SMTP_ZipPolicy()
		{
			IPolicyCache policyCache = TestHelpers.CreatePolicyCache(
				new string[] { Path.Combine(POLICY_FOLDER, "TestActionProcessor - Zip Policy Set.policy") });

			Assert.IsNotNull(policyCache);
			Assert.AreEqual(1, policyCache.PolicySets.Count);

			PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
			ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

			List<string> attachments = new List<string>();
			using (LocalCopyOfFileManager lcfm = new LocalCopyOfFileManager())
			{
				string folderName = lcfm.ManagedFolder;

				string fileName = Path.Combine(folderName, "TestProfanity.doc");
				System.IO.File.Copy(Path.Combine(TEST_FOLDER, "TestProfanity.doc"), fileName);
				attachments.Add(fileName);
				fileName = Path.Combine(folderName, "Dirty.doc");
				System.IO.File.Copy(Path.Combine(TEST_FOLDER, "Dirty.doc"), fileName);
				attachments.Add(fileName);
				fileName = Path.Combine(folderName, "TestDoc.ppt");
				System.IO.File.Copy(Path.Combine(TEST_FOLDER, "TestDoc.ppt"), fileName);
				attachments.Add(fileName);

				IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

				// PROCESS CONDITIONS
				IContainer container;
				PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
				Assert.IsNotNull(pro);

				// PROCESS ROUTING
				RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
				Assert.IsNotNull(routingProcessor.Process(pro));

				Assert.AreEqual(4, pro.ContentCollection.Count);
				Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
				Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
				Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[2].Type);
				Assert.AreEqual(FileType.PowerPoint.ToString(), pro.ContentCollection[3].Type);

				Assert.AreEqual(3, pro.UniversalRequestObject.Attachments.Count);
				Assert.AreEqual("TestProfanity.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[0].Name));
				Assert.AreEqual("Dirty.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[1].Name));
				Assert.AreEqual("TestDoc.ppt", Path.GetFileName(pro.UniversalRequestObject.Attachments[2].Name));

				// PROCESS ACTIONS
				ActionProcessor actionProcessor = new ActionProcessor(policyCache, policyEngineCache);
				actionProcessor.ProcessActions(pro);

				ActionUtils.PopulateResolvedActionCollection(pro);

				// EXECUTE ACTIONS
				ActionExecuter executer = new ActionExecuter(null);
				executer.ExecuteActions(pro, ref container);

				Assert.AreEqual(4, pro.ContentCollection.Count);
				Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
				Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
				Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[2].Type);
				Assert.AreEqual(FileType.PowerPoint.ToString(), pro.ContentCollection[3].Type);

				Assert.AreEqual(3, pro.UniversalRequestObject.Attachments.Count);
				Assert.AreEqual("TestProfanity.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[0].Name));
				Assert.AreEqual("Dirty.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[1].Name));
				Assert.AreEqual("TestDoc.ppt", Path.GetFileName(pro.UniversalRequestObject.Attachments[2].Name));
			}
		}
		public void Test_10_ExecuteAction_SMTP_Default_Policy_And_ZIP_Policy()
		{
			IPolicyCache policyCache = TestHelpers.CreatePolicyCache(new string[] { 
				Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\Projects\Hygiene\Policies\p5default.policy"),
				Path.Combine(POLICY_FOLDER, "TestActionProcessor - Zip Policy Set.policy") });

			Assert.IsNotNull(policyCache);
			Assert.AreEqual(2, policyCache.PolicySets.Count);

			PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
			ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

			List<string> attachments = new List<string>();
			attachments.Add(Path.Combine(TEST_FOLDER, "TestProfanity.doc"));
			attachments.Add(Path.Combine(TEST_FOLDER, "Dirty.doc"));
			attachments.Add(Path.Combine(TEST_FOLDER, "TestDoc.ppt"));

			IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

			// PROCESS CONDITIONS
			IContainer container;
			PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
			Assert.IsNotNull(pro);

			// PROCESS ROUTING
			RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
			Assert.IsNotNull(routingProcessor.Process(pro));

			Assert.AreEqual(4, pro.ContentCollection.Count);
			Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[2].Type);
			Assert.AreEqual(FileType.PowerPoint.ToString(), pro.ContentCollection[3].Type);

			Assert.AreEqual(3, pro.UniversalRequestObject.Attachments.Count);
			Assert.AreEqual("TestProfanity.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[0].Name));
			Assert.AreEqual("Dirty.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[1].Name));
			Assert.AreEqual("TestDoc.ppt", Path.GetFileName(pro.UniversalRequestObject.Attachments[2].Name));

			// PROCESS ACTIONS
			ActionProcessor actionProcessor = new ActionProcessor(policyCache, policyEngineCache);
			actionProcessor.ProcessActions(pro);
			ActionUtils.PopulateResolvedActionCollection(pro);

			// EXECUTE ACTIONS
			ActionExecuter executer = new ActionExecuter(null);
			IUniversalRequestObject outputUro = executer.ExecuteActions(pro, ref container);

			//Assert.AreEqual(4, pro.ContentCollection.Count);
			//Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
			//Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
			//Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[2].Type);
			//Assert.AreEqual(FileType.PowerPoint.ToString(), pro.ContentCollection[3].Type);

			Assert.AreEqual(2, outputUro.Attachments.Count);
			Assert.AreEqual("TestDoc.ppt", outputUro.Attachments[0].Name);
			Assert.AreEqual("attachments.zip", outputUro.Attachments[1].Name);

			File outputFile = new File(outputUro.Attachments[1].Data, outputUro.Attachments[0].Name);
			Assert.IsNotNull(outputFile);
			outputFile.ExpandContainer(outputFile.Password);
			Assert.AreEqual(2, outputFile.Files.Count);
			Assert.AreEqual("TestProfanity.doc", outputFile.Files[0].DisplayName);
			Assert.AreEqual("Dirty.doc", outputFile.Files[1].DisplayName);
		}
		public void Test_06_ExecuteAction_SMTP_ZipPolicy_HasZip()
		{
			IPolicyCache policyCache = TestHelpers.CreatePolicyCache(
				new string[] { Path.Combine(POLICY_FOLDER, "TestActionProcessor - Zip Policy Set.policy") });

			Assert.IsNotNull(policyCache);
			Assert.AreEqual(1, policyCache.PolicySets.Count);

			PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
			ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

			List<string> attachments = new List<string>();
			attachments.Add(Path.Combine(TEST_FOLDER, "TestProfanity.doc"));
			attachments.Add(Path.Combine(TEST_FOLDER, "I am a dirty zip.zip"));

			IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

			// PROCESS CONDITIONS
			IContainer container;
			PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
			Assert.IsNotNull(pro);

			// PROCESS ROUTING
			RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
			Assert.IsNotNull(routingProcessor.Process(pro));

			Assert.AreEqual(4, pro.ContentCollection.Count);
			Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
			Assert.AreEqual(FileType.ZIP.ToString(), pro.ContentCollection[2].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[3].Type);

			Assert.AreEqual(2, pro.UniversalRequestObject.Attachments.Count);
			Assert.AreEqual("TestProfanity.doc", Path.GetFileName(pro.UniversalRequestObject.Attachments[0].Name));
			Assert.AreEqual("I am a dirty zip.zip", Path.GetFileName(pro.UniversalRequestObject.Attachments[1].Name));

			// PROCESS ACTIONS
			ActionProcessor actionProcessor = new ActionProcessor(policyCache, policyEngineCache);
			actionProcessor.ProcessActions(pro);
			ActionUtils.PopulateResolvedActionCollection(pro);

			// EXECUTE ACTIONS
			ActionExecuter executer = new ActionExecuter(null);
			IUniversalRequestObject outputUro = executer.ExecuteActions(pro, ref container);

			Assert.AreEqual(4, pro.ContentCollection.Count);
			Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
			Assert.AreEqual(FileType.ZIP.ToString(), pro.ContentCollection[2].Type);
			Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[3].Type);

			Assert.AreEqual(2, outputUro.Attachments.Count);
			Assert.AreEqual("TestProfanity.zip", outputUro.Attachments[0].Name);
			Assert.AreEqual("I am a dirty zip.zip", outputUro.Attachments[1].Name);
		}
        public void TestProcessZipActionForContainer()
        {
            IPolicyCache policyCache = TestHelpers.CreatePolicyCache(new string[] { m_testPath + "Zip Policy Set.policy" });
            Assert.IsNotNull(policyCache);
            Assert.AreEqual(1, policyCache.PolicySets.Count);

            PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
            ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

            List<string> attachments = new List<string>();
            attachments.Add(Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\projects\Hygiene\src\TestDocuments\TestProfanity.doc"));
            attachments.Add(Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\projects\Hygiene\src\TestDocuments\Dirty.doc"));

            IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

            // PROCESS CONDITIONS
            IContainer container;
            PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
            Assert.IsNotNull(pro);

            // PROCESS ROUTING
            RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
            Assert.IsNotNull(routingProcessor.Process(pro));

            Assert.AreEqual(3, pro.ContentCollection.Count);
            Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
            Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
            Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[2].Type);

            // PROCESS ACTIONS
            ActionProcessor actionProcessor = new ActionProcessor(policyCache, policyEngineCache);
            actionProcessor.ProcessActions(pro);

            ContentItem contentItem = pro.ContentCollection[0] as ContentItem;
            Assert.IsNotNull(contentItem);
            Collection<IPolicyResponseAction> actionCollection = contentItem.PolicySetCollection[0].PolicyReportCollection[0].ActionCollection;
            // Actions not longer re-routed in action processor. Actions will be re-routed in action executor.
            Assert.IsNull(actionCollection);
            //Assert.IsNotNull(actionCollection);
            //Assert.AreEqual(1, actionCollection.Count);

            //contentItem = pro.ContentCollection[1] as ContentItem;
            //Assert.IsNotNull(contentItem);
            //actionCollection = contentItem.PolicySetCollection[0].PolicyReportCollection[0].ActionCollection;
            //Assert.IsNotNull(actionCollection);
            //Assert.AreEqual(1, actionCollection.Count);

            //contentItem = pro.ContentCollection[2] as ContentItem;
            //Assert.IsNotNull(contentItem);
            //actionCollection = contentItem.PolicySetCollection[0].PolicyReportCollection[0].ActionCollection;
            //Assert.IsNotNull(actionCollection);
            //Assert.AreEqual(1, actionCollection.Count);
        }
        /// <summary>
        /// Tests sending a mail with multiple LDAP routers set up
        /// </summary>
        /// <param name="clearAnalyzerList">
        /// If true, the analyzer list (DirectoryAnalyzers) is cleared prior to testing.
        /// </param>
        private void TestMultipleLdapRouters(bool clearAnalyzerList)
        {
            //  MultipleLdapRoutersTest.policy should contain a routing table with a sender DA0 and a receiver DA1
            //  DA0 should have the address "*****@*****.**", DA1 the address "*****@*****.**"
            if (clearAnalyzerList)
            {
                DirectorySearcher.DirectoryAnalyzers.Instance.Clear();
            }

            IPolicyCache policyCache = TestHelpers.CreatePolicyCache(new string[] { m_testPath + "MultipleLdapRoutersTest.policy" });
            Assert.IsNotNull(policyCache);
            Assert.AreEqual(1, policyCache.PolicySets.Count);

            PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
            ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

            List<string> attachments = new List<string>();
            attachments.Add(Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\projects\Hygiene\src\TestDocuments\Clean.doc"));

            IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments,"*****@*****.**","*****@*****.**");

            IContainer container;
            PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
            Assert.IsNotNull(pro);

            RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
            Assert.IsNotNull(routingProcessor.Process(pro));

            Assert.AreEqual(2, pro.ContentCollection.Count);
            Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
            Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);

            // Don't expect any routing response with the email body
            IContentItem contentItem = pro.ContentCollection[0];
            Assert.IsNotNull(contentItem);

            Assert.AreEqual(1, contentItem.PolicySetCollection.Count);
            IPolicySetResponse policySetResponse = contentItem.PolicySetCollection[0];
            Assert.IsNotNull(policySetResponse);

            Assert.AreEqual(1, policySetResponse.PolicyReportCollection.Count);
            IPolicyResponse policyResponse = policySetResponse.PolicyReportCollection[0];
            Assert.IsNotNull(policyResponse);

            IRoutingResponse routingResponse = policyResponse.Routing;
            Assert.IsNull(routingResponse);

            // Expect a routing response with the attachment
            contentItem = pro.ContentCollection[1];
            Assert.IsNotNull(contentItem);

            Assert.AreEqual(1, contentItem.PolicySetCollection.Count);
            policySetResponse = contentItem.PolicySetCollection[0];
            Assert.IsNotNull(policySetResponse);

            Assert.AreEqual(1, policySetResponse.PolicyReportCollection.Count);
            policyResponse = policySetResponse.PolicyReportCollection[0];
            Assert.IsNotNull(policyResponse);

            routingResponse = policyResponse.Routing;
            Assert.IsNotNull(routingResponse);

            Assert.AreEqual("DA0 to DA1", routingResponse.Name);
        }
        public void TestProcessWordDocumentAndTextFile()
        {
            IPolicyCache policyCache = TestHelpers.CreatePolicyCache(new string[] { m_testPath + "Zip Policy Set.policy" });
            Assert.IsNotNull(policyCache);
            Assert.AreEqual(1, policyCache.PolicySets.Count);

            PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
            ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

            List<string> attachments = new List<string>();
            attachments.Add(Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\projects\Hygiene\src\TestDocuments\TestProfanity.doc"));
            attachments.Add(Workshare.TestUtils.TestFileUtils.MakeRootPathAbsolute(@"\projects\Hygiene\src\TestDocuments\TestDoc.txt"));

            IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

            IContainer container;
            PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
            Assert.IsNotNull(pro);

            RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
            Assert.IsNotNull(routingProcessor.Process(pro));

            Assert.AreEqual(3, pro.ContentCollection.Count);
            Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);
            Assert.AreEqual(FileType.WordDocument.ToString(), pro.ContentCollection[1].Type);
            Assert.AreEqual(FileType.TextDocument.ToString(), pro.ContentCollection[2].Type);

            IContentItem contentItem = pro.ContentCollection[1];
            Assert.IsNotNull(contentItem);

            Assert.AreEqual(1, contentItem.PolicySetCollection.Count);
            IPolicySetResponse policySetResponse = contentItem.PolicySetCollection[0];
            Assert.IsNotNull(policySetResponse);

            Assert.AreEqual(1, policySetResponse.PolicyReportCollection.Count);
            IPolicyResponse policyResponse = policySetResponse.PolicyReportCollection[0];
            Assert.IsNotNull(policyResponse);

            RoutingResponse routingResponse = policyResponse.Routing as RoutingResponse;
            Assert.IsNotNull(routingResponse);

            Assert.AreEqual("To External Recipients", routingResponse.Name);
            Assert.AreEqual("Low", routingResponse.Rating);
            Assert.AreEqual("w-7639d673-ab9d-4380-aad3-c5f7e3931d5e", routingResponse.ActionSetId);

            contentItem = pro.ContentCollection[2];
            Assert.IsNotNull(contentItem);

            Assert.AreEqual(1, contentItem.PolicySetCollection.Count);
            policySetResponse = contentItem.PolicySetCollection[0];
            Assert.IsNotNull(policySetResponse);

            Assert.AreEqual(1, policySetResponse.PolicyReportCollection.Count);
            policyResponse = policySetResponse.PolicyReportCollection[0];
            Assert.IsNotNull(policyResponse);

            routingResponse = policyResponse.Routing as RoutingResponse;
            Assert.IsNull(routingResponse);
        }
        public void TestProcessNoAttachments()
        {
            IPolicyCache policyCache = TestHelpers.CreatePolicyCache(new string[] { m_testPath + "Zip Policy Set.policy" });
            Assert.IsNotNull(policyCache);
            Assert.AreEqual(1, policyCache.PolicySets.Count);

            PolicyEngineCache policyEngineCache = new PolicyEngineCache(policyCache, null);
            ConditionProcessor conditionProcessor = new ConditionProcessor(policyEngineCache, null);

            List<string> attachments = new List<string>();
            IUniversalRequestObject uro = TestHelpers.CreateSmtpUro(attachments);

            IContainer container;
            PolicyResponseObject pro = conditionProcessor.Process(RunAt.Client, uro, out container);
            Assert.IsNotNull(pro);

            RoutingProcessor routingProcessor = new RoutingProcessor(policyEngineCache);
            Assert.IsNotNull(routingProcessor.Process(pro));

            Assert.AreEqual(1, pro.ContentCollection.Count);
            Assert.AreEqual(FileType.Email.ToString(), pro.ContentCollection[0].Type);

            IContentItem contentItem = pro.ContentCollection[0];
            Assert.IsNotNull(contentItem);

            Assert.AreEqual(1, contentItem.PolicySetCollection.Count);
            IPolicySetResponse policySetResponse = contentItem.PolicySetCollection[0];
            Assert.IsNotNull(policySetResponse);

            Assert.AreEqual(1, policySetResponse.PolicyReportCollection.Count);
            IPolicyResponse policyResponse = policySetResponse.PolicyReportCollection[0];
            Assert.IsNotNull(policyResponse);

            IRoutingResponse routingResponse = policyResponse.Routing;
            Assert.IsNull(routingResponse);
        }