public void ReadRequest_11()
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Request.xml"));

            var serialize = new Xacml10ProtocolSerializer();

            using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) {
                var data = serialize.ReadContextRequest(reader);
                Assert.IsNotNull(data);

                // Subject
                Assert.AreEqual(1, data.Subjects.Count);
                {
                    var subject = data.Subjects.First();
                    Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"), subject.SubjectCategory);
                    Assert.AreEqual(1, subject.Attributes.Count);
                    {
                        var att = subject.Attributes.First();
                        Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:subject:subject-id"), att.AttributeId);
                        Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"), att.DataType);
                        Assert.AreEqual(1, att.AttributeValues.Count);
                        Assert.AreEqual("*****@*****.**", att.AttributeValues.First().Value);
                    }
                }

                // Resource
                Assert.AreEqual(1, data.Resources.Count);
                {
                    var resource = data.Resources.First();
                    Assert.AreEqual(1, resource.Attributes.Count);
                    {
                        var att = resource.Attributes.First();
                        Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:resource:ufspath"), att.AttributeId);
                        Assert.AreEqual(new Uri("http://www.w3.org/2001/XMLSchema#anyURI"), att.DataType);
                        Assert.AreEqual(1, att.AttributeValues.Count);
                        Assert.AreEqual("/medico/record/patient/BartSimpson", att.AttributeValues.First().Value);
                    }
                }

                // Action
                var action = data.Action;
                Assert.AreEqual(1, action.Attributes.Count);
                {
                    var att = action.Attributes.First();
                    Assert.AreEqual(new Uri("urn:oasis:names:tc:xacml:1.0:action:action-id"), att.AttributeId);
                    Assert.AreEqual(new Uri("http://www.w3.org/2001/XMLSchema#string"), att.DataType);
                    Assert.AreEqual(1, att.AttributeValues.Count);
                    Assert.AreEqual("read", att.AttributeValues.First().Value);
                }
            }
        }
        public void WritePolicy_11()
        {
            var subject = new XacmlSubject(
                new XacmlSubjectMatch[]
            {
                new XacmlSubjectMatch(
                    new Uri("http://www.MatchId.www"),
                    new XacmlAttributeValue(new Uri("http://www.DataType.www")),
                    new XacmlSubjectAttributeDesignator(new Uri("http://www.AttributeId.www"), new Uri("http://www.DataType.www"))
                {
                    Issuer = "String", MustBePresent = false, Category = new Uri("http://www.subjectCategory.www")
                })
            });

            var            target         = new XacmlTarget(subject, null, null);
            XacmlPolicySet xacmlPolicySet = new XacmlPolicySet(new Uri("http://www.PolicySetId.www"), new Uri("http://www.PolicyCombiningAlgId.www"), target);

            xacmlPolicySet.Description  = "description string";
            xacmlPolicySet.XPathVersion = Xacml10Constants.XPathVersions.Xpath10;

            XacmlPolicy xacmlPolicy = new XacmlPolicy(new Uri("http://www.PolicyId.www"), new Uri("http://www.RuleCombiningAlgId.www"), new XacmlTarget())
            {
                Description  = "description string",
                XPathVersion = Xacml10Constants.XPathVersions.Xpath10,
            };

            XacmlRule xacmlRule = new XacmlRule("http://www.RuleId.www", XacmlEffectType.Permit)
            {
                Description = "xacmlRule description"
            };

            xacmlPolicy.Rules.Add(xacmlRule);
            XacmlAttributeAssignment xacmlAttributeAssignment = new XacmlAttributeAssignment(new Uri("http://www.AttributeId.www"), new Uri("http://www.DataType.www"));
            XacmlObligation          xacmlObligation          = new XacmlObligation(new Uri("http://www.ObligationId.www"), XacmlEffectType.Permit, new XacmlAttributeAssignment[] { xacmlAttributeAssignment });

            xacmlPolicy.Obligations.Add(xacmlObligation);

            xacmlPolicySet.Policies.Add(xacmlPolicy);

            StringBuilder builder = new StringBuilder();

            using (XmlWriter writer = XmlWriter.Create(builder)) {
                var serializer = new Xacml10ProtocolSerializer();
                serializer.WritePolicySet(writer, xacmlPolicySet);
            }

            string xml = builder.ToString();

            ValidateMessage(xml, Path.Combine(TestCasePath, "cs-xacml-schema-context-01.xsd"));
        }
        public void ReadPolicy_11()
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Rule_1.xml"));

            var serialize = new Xacml10ProtocolSerializer();

            using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) {
                var data = serialize.ReadPolicy(reader);

                Assert.IsNotNull(data);
            }
        }
        public static EvaluationEngine Create(XmlReader reader, IXacmlPolicyRepository ch)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            EvaluationEngine engine;

            if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml10Constants.Namespaces.Policy))
            {
                Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml10Constants.Namespaces.Policy))
            {
                Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicySet(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml20Constants.Namespaces.Policy))
            {
                Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml20Constants.Namespaces.Policy))
            {
                Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicySet(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml30Constants.Namespaces.Policy))
            {
                Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer();
                engine = new EvaluationEngine30(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml30Constants.Namespaces.Policy))
            {
                Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer();
                engine = new EvaluationEngine30(serializer.ReadPolicySet(reader));
            }
            else
            {
                throw new XmlException("Unknown XML");
            }

            engine.ch = ch;
            return(engine);
        }
        public void ReadResponse_11()
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Path.Combine(TestCasePath, @"XACML_Samples\1.1\Example_1\Response.xml"));

            var serialize = new Xacml10ProtocolSerializer();

            using (XmlReader reader = XmlReader.Create(new StringReader(xmlDoc.OuterXml))) {
                var data = serialize.ReadContextResponse(reader);

                Assert.IsNotNull(data);

                Assert.AreEqual(1, data.Results.Count);
                Assert.AreEqual(XacmlContextDecision.NotApplicable, data.Results.First().Decision);
            }
        }
        public void WriteRequest_11()
        {
            var s       = new XacmlContextSubject(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue()));
            var r       = new XacmlContextResource(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue()));
            var a       = new XacmlContextAction(new XacmlContextAttribute(new Uri("uri:action"), new Uri("uri:type"), new XacmlContextAttributeValue()));
            var request = new XacmlContextRequest(r, a, s);

            StringBuilder builder = new StringBuilder();

            using (XmlWriter writer = XmlWriter.Create(builder))
            {
                var serializer = new Xacml10ProtocolSerializer();
                serializer.WriteContextRequest(writer, request);
            }

            string xml = builder.ToString();

            ValidateMessage(xml, Path.Combine(TestCasePath, "cs-xacml-schema-context-01.xsd"));
        }
        public static EvaluationEngine Create(XmlReader reader, IXacmlPolicyRepository ch) {
            Contract.Requires<ArgumentNullException>(reader != null);

            EvaluationEngine engine;

            if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml10Constants.Namespaces.Policy)) {
                Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml10Constants.Namespaces.Policy)) {
                Xacml10ProtocolSerializer serializer = new Xacml10ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicySet(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml20Constants.Namespaces.Policy)) {
                Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml20Constants.Namespaces.Policy)) {
                Xacml20ProtocolSerializer serializer = new Xacml20ProtocolSerializer();
                engine = new EvaluationEngine(serializer.ReadPolicySet(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.Policy, Xacml30Constants.Namespaces.Policy)) {
                Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer();
                engine = new EvaluationEngine30(serializer.ReadPolicy(reader));
            }
            else if (reader.IsStartElement(XacmlConstants.ElementNames.PolicySet, Xacml30Constants.Namespaces.Policy)) {
                Xacml30ProtocolSerializer serializer = new Xacml30ProtocolSerializer();
                engine = new EvaluationEngine30(serializer.ReadPolicySet(reader));
            }
            else {
                throw Diagnostic.DiagnosticTools.ExceptionUtil.ThrowHelperError(new XmlException("Unknown XML"));
            }

            engine.ch = ch;
            return engine;
        }