示例#1
0
 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));
 }
示例#2
0
 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));
 }
示例#3
0
 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));
 }
示例#4
0
 //リフレクションを使用してプライベートメソッドにアクセスする 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;
     }
 }
示例#5
0
        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."));
        }
示例#6
0
        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("ここが実行されたらテスト失敗");
        }
示例#7
0
        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."));
        }
示例#8
0
        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."));
        }
示例#9
0
        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."));
        }
示例#10
0
        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."));
        }
示例#11
0
        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("ここが実行されたらテスト失敗");
        }
示例#12
0
文件: RrDb.cs 项目: jsakamoto/bjd5
        //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));
                    }
                }
            }
        }