Exemple #1
0
        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));
        }
Exemple #2
0
        [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));
        }
Exemple #3
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;
            }
        }
Exemple #4
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));
        }
Exemple #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."));
        }
Exemple #6
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."));
        }
Exemple #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."));
        }
Exemple #8
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("ここが実行されたらテスト失敗");
        }
Exemple #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."));
        }
Exemple #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."));
        }
Exemple #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("ここが実行されたらテスト失敗");
        }
Exemple #12
0
        //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));
                    }
                }
            }
        }