-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
TransformTest.cs
136 lines (117 loc) · 4.84 KB
/
TransformTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// Unit tests for Transform
//
// Author:
// Sebastien Pouliot <sebastien@ximian.com>
//
// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
using System.IO;
using System.Text;
using System.Xml;
using Xunit;
namespace System.Security.Cryptography.Xml.Tests
{
public class ConcreteTransform : Transform
{
protected override XmlNodeList GetInnerXml()
{
throw new NotImplementedException();
}
public override object GetOutput(Type type)
{
return new MemoryStream();
}
public override object GetOutput()
{
throw new NotImplementedException();
}
public override Type[] InputTypes
{
get { throw new NotImplementedException(); }
}
public override void LoadInnerXml(global::System.Xml.XmlNodeList nodeList)
{
throw new NotImplementedException();
}
public override void LoadInput(object obj)
{
throw new NotImplementedException();
}
public override Type[] OutputTypes
{
get { throw new NotImplementedException(); }
}
}
public class TransformTest
{
[Fact]
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
public void Constructor()
{
ConcreteTransform concreteTransform = new ConcreteTransform();
Assert.Empty(concreteTransform.PropagatedNamespaces);
}
[Fact]
public void Constructor_NoPropagatedNamespaces()
{
ConcreteTransform concreteTransform = new ConcreteTransform();
Assert.Null(concreteTransform.Context);
Assert.Null(concreteTransform.Algorithm);
}
[Fact]
public void GetDigestedOutput_Null()
{
Assert.Throws<NullReferenceException>(() => new ConcreteTransform().GetDigestedOutput(null));
}
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[Theory]
[InlineData(false, "<a><b><c xmlns=\"urn:foo\" /></b></a>")]
[InlineData(true, "<a f=\"urn:foo\"><b><c xmlns=\"urn:foo\" /></b></a>")]
public void PropagatedNamespaces_XmlDecryptionTransform(bool addPropagatedNamespace, string expectedResult)
{
XmlDocument baseDocument = new XmlDocument();
baseDocument.LoadXml("<a><b><c xmlns=\"urn:foo\"/></b></a>");
using (Aes aes = Aes.Create())
{
EncryptedXml encryptedXml = new EncryptedXml(baseDocument);
encryptedXml.AddKeyNameMapping("key", aes);
XmlElement bElement = (XmlElement) baseDocument.DocumentElement.SelectSingleNode("b");
EncryptedData encryptedData = encryptedXml.Encrypt(bElement, "key");
EncryptedXml.ReplaceElement(bElement, encryptedData, false);
XmlDecryptionTransform decryptionTransform = new XmlDecryptionTransform();
decryptionTransform.EncryptedXml = encryptedXml;
decryptionTransform.LoadInput(baseDocument);
if (addPropagatedNamespace)
{
decryptionTransform.PropagatedNamespaces.Add("f", "urn:foo");
}
XmlDocument decryptedDocument = (XmlDocument) decryptionTransform.GetOutput(typeof(XmlDocument));
Assert.Equal(expectedResult, decryptedDocument.OuterXml);
}
}
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[Theory]
[InlineData(typeof(XmlDsigC14NTransform))]
[InlineData(typeof(XmlDsigExcC14NTransform))]
[InlineData(typeof(XmlDsigC14NWithCommentsTransform))]
public void PropagatedNamespaces(Type type)
{
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("foo", "urn:foo"));
doc.DocumentElement.AppendChild(doc.CreateElement("bar", "urn:bar"));
Assert.Equal(string.Empty, doc.DocumentElement.GetAttribute("xmlns:f"));
Transform transform = Activator.CreateInstance(type) as Transform;
transform.LoadInput(doc);
transform.PropagatedNamespaces.Add("f", "urn:foo");
transform.PropagatedNamespaces.Add("b", "urn:bar");
using (Stream stream = transform.GetOutput(typeof(Stream)) as Stream)
using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8))
{
string result = streamReader.ReadToEnd();
Assert.Equal("<foo xmlns=\"urn:foo\"><bar xmlns=\"urn:bar\"></bar></foo>", result);
Assert.Equal("urn:foo", doc.DocumentElement.NamespaceURI);
}
}
}
}