summaryrefslogtreecommitdiff
path: root/wrappers/csharp/EduVpnCommonTests/VerifyTests.cs
blob: 41faf878533a556f5cd7f874937b4e0637dab766 (plain)
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
using System;
using System.IO;
using System.Linq;
using EduVpnCommon;
using NUnit.Framework;

namespace EduVpnCommonTests
{
	[TestFixture(TestOf = typeof(Discovery)), Parallelizable]
	public class VerifyTests
	{
		// Relative to e.g. EduVpnCommonTests/bin/Debug/net5.0
		readonly string testDataDir_ = $"{TestContext.CurrentContext.TestDirectory}/../../../../../../test_data";

		[OneTimeSetUp]
		public void OneTimeSetUp() =>
			Discovery.InsecureTestingSetExtraKey(File.ReadLines($"{testDataDir_}/dummy/public.key").Last());

		[Test]
		[TestCase("dummy/server_list.json.minisig",       "dummy/server_list.json",       "server_list.json")]
		[TestCase("dummy/organization_list.json.minisig", "dummy/organization_list.json", "organization_list.json")]
		public void TestValid(string sigFile, string jsonFile, string expectedFileName) =>
			Discovery.Verify(
				File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
				File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
				expectedFileName,
				DateTimeOffset.UnixEpoch);

		[Test]
		[TestCase("dummy/server_list.json.minisig", "dummy/server_list.json", "server_list.json")]
		public void TestValidSegment(string sigFile, string jsonFile, string expectedFileName)
		{
			var bytes = new byte[] { 1, 2, 3 }.Concat(File.ReadAllBytes($"{testDataDir_}/{jsonFile}"))
				.Concat(new byte[] { 1, 2, 3 }).ToArray();
			Discovery.Verify(
				File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
				new(bytes, 3, bytes.Length - 3 - 3),
				expectedFileName,
				DateTimeOffset.UnixEpoch);
		}

		[Test]
		[TestCase("dummy/random.txt", "dummy/server_list.json", "server_list.json")]
		public void TestInvalidSignature(string sigFile, string jsonFile, string expectedFileName) =>
			Assert.Throws(Is.TypeOf<VerifyException>()
					.And.Property(nameof(VerifyException.Code)).EqualTo(VerifyErrorCode.ErrInvalidSignature),
				() => Discovery.Verify(
					File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
					File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
					expectedFileName,
					DateTimeOffset.UnixEpoch));

		[Test]
		[TestCase("dummy/server_list.json.wrong_key.minisig", "dummy/server_list.json", "server_list.json")]
		public void TestWrongKey(string sigFile, string jsonFile, string expectedFileName) =>
			Assert.Throws(Is.TypeOf<VerifyException>()
					.And.Property(nameof(VerifyException.Code)).EqualTo(VerifyErrorCode.ErrInvalidSignatureUnknownKey),
				() => Discovery.Verify(
					File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
					File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
					expectedFileName,
					DateTimeOffset.UnixEpoch));

		[Test]
		[TestCase("dummy/server_list.json.minisig", "dummy/server_list.json", "server_list.json")]
		public void TestOldSignature(string sigFile, string jsonFile, string expectedFileName) =>
			Assert.Throws(Is.TypeOf<VerifyException>()
					.And.Property(nameof(VerifyException.Code)).EqualTo(VerifyErrorCode.ErrTooOld),
				() => Discovery.Verify(
					File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
					File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
					expectedFileName,
					DateTimeOffset.MaxValue));

		[Test]
		[TestCase("dummy/other_list.json.minisig", "dummy/other_list.json", "other_list.json")]
		public void TestUnknownExpectedFile(string sigFile, string jsonFile, string expectedFileName) =>
			Assert.Throws<ArgumentException>(
				() => Discovery.Verify(
					File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
					File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
					expectedFileName,
					DateTimeOffset.UnixEpoch));
	}
}