public void IsSecretの違いによるToRegの確認Enableがfalseの場合(bool isSecret, string expected) { //setUp var enable = false; //Enable=FALSE var sut = new OneDat(enable, StrList, IsSecretlList); //exercise var actual = sut.ToReg(isSecret); //verify Assert.That(actual, Is.EqualTo(expected)); }
[TestCase(3, "\t")] //無効文字列 public void FromRegに無効な入力があった時falseが帰る(int max, String str) { //setUp var sut = new OneDat(true, new String[max], new bool[max]); var expected = false; //exercise var actual = sut.FromReg(str); //verify Assert.That(actual, Is.EqualTo(expected)); }
//リフレクションを使用してプライベートメソッドにアクセスする RrDb.addOneDat(string,OneDat) public static void AddOneDat(RrDb sut, string domainName, OneDat oneDat) { var type = sut.GetType(); var func = type.GetMethod("AddOneDat", BindingFlags.NonPublic | BindingFlags.Instance); try{ func.Invoke(sut, new object[] { domainName, oneDat }); } catch (Exception e) { //リフレクションで呼び出したメソッドで例外が発生すると、System.Reflection.TargetInvocationException //でラップされて、InnerException プロパティに発生した例外が設定される throw e.InnerException; } }
public void FromRegで初期化してToRegで出力する(int max, String str) { //setUp var sut = new OneDat(true, new String[max], new bool[max]); sut.FromReg(str); var expected = str; //exercise var actual = sut.ToReg(false); //verify Assert.That(actual, Is.EqualTo(expected)); }
public void CNAMEレコードを読み込んだ時_CNAMEが保存される() { //setUp var sut = new RrDb(); var oneDat = new OneDat(true, new[] { "3", "cname", "alias", "255.254.253.252", "0" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.That(RrDbTest.Size(sut), Is.EqualTo(1)); //Cname Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("Cname alias.aaa.com. TTL=0 cname.aaa.com.")); }
public void AAAAレコードを読み込んだ時_AAAA及びPTRが保存される() { //setUp var sut = new RrDb(); var oneDat = new OneDat(true, new[] { "4", "www", "alias", "fe80::f509:c5be:437b:3bc5", "10" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.That(RrDbTest.Size(sut), Is.EqualTo(2)); //AAAA,PTR Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("Aaaa www.aaa.com. TTL=0 fe80::f509:c5be:437b:3bc5")); Assert.That(print(RrDbTest.Get(sut, 1)), Is.EqualTo("Ptr 5.c.b.3.b.7.3.4.e.b.5.c.9.0.5.f.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. TTL=0 www.aaa.com.")); }
public void Aレコードを読み込んだ時_A及びPTRが保存される() { //setUp var sut = new RrDb(); var oneDat = new OneDat(true, new[] { "0", "www", "alias", "192.168.0.1", "10" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.That(RrDbTest.Size(sut), Is.EqualTo(2)); //A,PTR Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("A www.aaa.com. TTL=0 192.168.0.1")); Assert.That(print(RrDbTest.Get(sut, 1)), Is.EqualTo("Ptr 1.0.168.192.in-addr.arpa. TTL=0 www.aaa.com.")); }
public void enable_falseのデータを追加すると例外が発生する() { //実際に発生するのはValidObjExceptionだが、privateメソッドの制約のためExceptionの発生をテストする //setUp var sut = new RrDb(); var oneDat = new OneDat(false, new[] { "0", "www", "alias", "192.168.0.1", "10" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.Fail("ここが実行されたらテスト失敗"); }
public void NSレコードを読み込んだ時_NS_A及びPTRが保存される() { //setUp var sut = new RrDb(); var oneDat = new OneDat(true, new[] { "1", "ns", "alias", "111.3.255.0", "0" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify count Assert.That(RrDbTest.Size(sut), Is.EqualTo(3)); //NS,A,PTR Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("Ns aaa.com. TTL=0 ns.aaa.com.")); Assert.That(print(RrDbTest.Get(sut, 1)), Is.EqualTo("A ns.aaa.com. TTL=0 111.3.255.0")); Assert.That(print(RrDbTest.Get(sut, 2)), Is.EqualTo("Ptr 0.255.3.111.in-addr.arpa. TTL=0 ns.aaa.com.")); }
public void MXレコードを読み込んだ時_MX_A及びPTRが保存される() { //setUp var sut = new RrDb(); var oneDat = new OneDat(true, new[] { "2", "smtp", "alias", "210.10.2.250", "15" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.That(RrDbTest.Size(sut), Is.EqualTo(3)); //MX,A,PTR Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("Mx aaa.com. TTL=0 15 smtp.aaa.com.")); Assert.That(print(RrDbTest.Get(sut, 1)), Is.EqualTo("A smtp.aaa.com. TTL=0 210.10.2.250")); Assert.That(print(RrDbTest.Get(sut, 2)), Is.EqualTo("Ptr 250.2.10.210.in-addr.arpa. TTL=0 smtp.aaa.com.")); }
public void 無効なタイプのレコードを読み込むと例外が発生する() { //実際に発生するのはValidObjExceptionだが、privateメソッドの制約のためExceptionの発生をテストする //setUp var sut = new RrDb(); //タイプは0~4まで var oneDat = new OneDat(true, new[] { "5", "www", "alias", "127.0.0.1", "0" }, _isSecret); //exercise RrDbTest.AddOneDat(sut, DomainName, oneDat); //verify Assert.Fail("ここが実行されたらテスト失敗"); }
//OneDatを追加する private void AddOneDat(string domainName, OneDat o) { if (!o.Enable) { throw new ValidObjException("isEnable=false"); } var type = Int32.Parse(o.StrList[0]); var name = o.StrList[1]; var alias = o.StrList[2]; Ip ip = null; if (type != 3) { //Cnameの時、Ipアドレスが入っていないので、例外が発生する ip = new Ip(o.StrList[3]); } var priority = ushort.Parse(o.StrList[4]); const int ttl = 0; //有効期限なし //最後に.がついていない場合、ドメイン名を追加する if (name.LastIndexOf('.') != name.Length - 1) { name = name + "." + domainName; } if (alias.LastIndexOf('.') != alias.Length - 1) { alias = alias + "." + domainName; } DnsType dnsType; switch (type) { case 0: dnsType = DnsType.A; if (ip != null && ip.InetKind != InetKind.V4) { throw new ValidObjException("IPv6 cannot address it in an A(PTR) record"); } Add(new RrA(name, ttl, ip)); break; case 1: dnsType = DnsType.Ns; Add(new RrNs(domainName, ttl, name)); break; case 2: dnsType = DnsType.Mx; Add(new RrMx(domainName, ttl, priority, name)); break; case 3: dnsType = DnsType.Cname; Add(new RrCname(alias, ttl, name)); break; case 4: dnsType = DnsType.Aaaa; if (ip != null && ip.InetKind != InetKind.V6) { throw new ValidObjException("IPv4 cannot address it in an AAAA record"); } Add(new RrAaaa(name, ttl, ip)); break; default: throw new ValidObjException(string.Format("unknown type ({0})", type)); } //MX及びNSの場合は、A or AAAAも追加する if (dnsType == DnsType.Mx || dnsType == DnsType.Ns) { if (ip != null && ip.InetKind == InetKind.V4) { Add(new RrA(name, ttl, ip)); } else { Add(new RrAaaa(name, ttl, ip)); } } //CNAME以外は、PTRレコードを自動的に生成する if (dnsType != DnsType.Cname) { //PTR名を作成 [例] 192.168.0.1 -> 1.0.168.192.in-addr.arpa; if (ip != null && ip.InetKind == InetKind.V4) { //IPv4 var ptrName = string.Format("{0}.{1}.{2}.{3}.in-addr.arpa.", (ip.IpV4[3] & 0xff), (ip.IpV4[2] & 0xff), (ip.IpV4[1] & 0xff), (ip.IpV4[0] & 0xff)); Add(new RrPtr(ptrName, ttl, name)); } else { //IPv6 var sb = new StringBuilder(); if (ip != null) { foreach (var a in ip.IpV6) { sb.Append(string.Format("{0:x2}", a)); } } var ipStr = sb.ToString(); if (ipStr.Length == 32) { sb = new StringBuilder(); for (var e = 31; e >= 0; e--) { sb.Append(ipStr[e]); sb.Append('.'); } Add(new RrPtr(sb + "ip6.arpa.", ttl, name)); } } } }