public void IsSecretの違いによるToRegの確認Enableがtrueの場合(bool isSecret, string expected) { //setUp var enable = true; //Enable=TRUE var sut = new OneDat(enable, StrList, IsSecretlList); //exercise var actual = sut.ToReg(isSecret); //verify Assert.That(actual, Is.EqualTo(expected)); }
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)); }
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)); }
//リフレクションを使用してプライベートメソッドにアクセスする 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 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 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 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 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 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)); } } } }