Пример #1
0
 public void A_AAAA_NS以外タイプは例外が発生する()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.AddNamedCaLine(sut, "", ".                        3600000  IN  MX    A.ROOT-SERVERS.NET.");
 }
Пример #2
0
 public void Aタイプで不正なアドレスを指定すると例外が発生する()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.AddNamedCaLine(sut, "", "A.ROOT-SERVERS.NET.      3600000      A     1.1.1.1.1");
 }
Пример #3
0
 public void AAAAタイプでアドレスに矛盾があると例外が発生する()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.AddNamedCaLine(sut, "", "A.ROOT-SERVERS.NET.      3600000      AAAA     192.168.0.1");
 }
Пример #4
0
        protected override bool OnStartServer()
        {
            //ルートキャッシュの初期化
            _rootCache = null;
            var namedCaPath = string.Format("{0}\\{1}", _kernel.ProgDir(), Conf.Get("rootCache"));

            if (File.Exists(namedCaPath))
            {
                try {
                    //named.ca読み込み用コンストラクタ
                    var expire = (int)Conf.Get("soaExpire");
                    //var expire = (uint)Conf.Get("soaExpire");
                    _rootCache = new RrDb(namedCaPath, (uint)expire);
                    Logger.Set(LogKind.Detail, null, 6, namedCaPath);
                }
                catch (IOException) {
                    Logger.Set(LogKind.Error, null, 2, string.Format("filename={0}", namedCaPath));
                }
            }
            else
            {
                Logger.Set(LogKind.Error, null, 3, namedCaPath);
            }

            //設定したドメイン情報を初期化する
            if (_cacheList != null)
            {
                _cacheList.Clear();
            }
            _cacheList = new List <RrDb>();
            var op = _kernel.ListOption.Get("DnsDomain");

            if (op != null)
            {
                var domainList = (Dat)op.GetValue("domainList");
                if (domainList != null)
                {
                    foreach (OneDat o in domainList)
                    {
                        if (o.Enable)
                        {
                            //ドメインごとのリソースの読込
                            var domainName = o.StrList[0];
                            //Ver6.1.0
                            var authority = bool.Parse(o.StrList[1]);
                            var res       = _kernel.ListOption.Get("Resource-" + domainName);
                            if (res != null)
                            {
                                var resource = (Dat)res.GetValue("resourceList");
                                var rrDb     = new RrDb(Logger, Conf, resource, domainName, authority);
                                _cacheList.Add(rrDb);
                                Logger.Set(LogKind.Detail, null, 21, "Resource-" + domainName);
                            }
                        }
                    }
                }
            }

            return(true);
        }
Пример #5
0
 public void 新規のリソース追加は成功する()
 {
     //setUp
     var sut = new RrDb();
     var expected = true; //成功
     //exercise
     var actual = sut.Add(new RrA("domain", 100, new Ip("1.2.3.4")));
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #6
0
 public void 予め同一ドメインのNSレコードが無い場合失敗する_レコードが無い()
 {
     //setUp
     RrDb sut = new RrDb();
     bool expected = false;
     //exercise
     bool actual = RrDbTest.InitSoa(sut, "aaa.com.", "mail.", 1, 2, 3, 4, 5);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #7
0
 public void 予め同一ドメインのNSレコードが無い場合失敗する_NSレコードはあるがドメインが違う()
 {
     //setUp
     RrDb sut = new RrDb();
     bool expected = false;
     sut.Add(new RrNs("bbb.com.", 0, "ns.bbb.com.")); //NSレコードはあるがドメインが違う
     //exercise
     bool actual = RrDbTest.InitSoa(sut, "aaa.com.", "mail.", 1, 2, 3, 4, 5);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #8
0
 public void Aレコードの処理()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     var retName = RrDbTest.AddNamedCaLine(sut, "", "A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4");
     //verify
     Assert.That(retName, Is.EqualTo("A.ROOT-SERVERS.NET."));
     Assert.That(RrDbTest.Size(sut), Is.EqualTo(1)); //A
     Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("A A.ROOT-SERVERS.NET. TTL=0 198.41.0.4")); //TTLは強制的に0になる
 }
Пример #9
0
 public void AAAAレコードの処理()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     var retName = RrDbTest.AddNamedCaLine(sut, "", "A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30");
     //verify
     Assert.That(retName, Is.EqualTo("A.ROOT-SERVERS.NET."));
     Assert.That(RrDbTest.Size(sut), Is.EqualTo(1)); //Aaaa
     Assert.That(print(RrDbTest.Get(sut, 0)), Is.EqualTo("Aaaa A.ROOT-SERVERS.NET. TTL=0 2001:503:ba3e::2:30")); //TTLは強制的に0になる
 }
Пример #10
0
 public void 件数は4件になる()
 {
     //setUp
     var sut = new RrDb();
     var expected = 5;
     //exercise
     RrDbTest.InitLocalHost(sut);
     var actual = RrDbTest.Size(sut);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #11
0
 public void 予め同一ドメインのNSレコードが無い場合失敗する_ドメインは同じだがNSレコードではない()
 {
     //setUp
     RrDb sut = new RrDb();
     bool expected = false;
     sut.Add(new RrA("aaa.com.", 0, new Ip("192.168.0.1"))); //ドメインは同じだがNSレコードではない
     //exercise
     bool actual = RrDbTest.InitSoa(sut, "aaa.com.", "mail.", 1, 2, 3, 4, 5);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #12
0
 public void 予め同一ドメインのNSレコードが有る場合成功する()
 {
     //setUp
     RrDb sut = new RrDb();
     bool expected = true;
     sut.Add(new RrNs("aaa.com.", 0, "ns.aaa.com."));
     //exercise
     bool actual = RrDbTest.InitSoa(sut, "aaa.com.", "mail.", 1, 2, 3, 4, 5);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #13
0
 public void リソース確認_3番目はAAAAレコードとなる()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.InitLocalHost(sut);
     var o = (RrAaaa) RrDbTest.Get(sut, 2);
     //verify
     //Assert.That(o.getDnsType(), Is.EqualTo(DnsType.Aaaa));
     //Assert.That(o.getName(), Is.EqualTo("localhost."));
     Assert.That(o.Ip.ToString(), Is.EqualTo("::1"));
 }
Пример #14
0
 public void リソース確認_1番目はAレコードとなる()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.InitLocalHost(sut);
     var o = (RrA) RrDbTest.Get(sut, 0);
     //verify
     Assert.That(o.DnsType, Is.EqualTo(DnsType.A));
     Assert.That(o.Name, Is.EqualTo("localhost."));
     Assert.That(o.Ip.ToString(), Is.EqualTo("127.0.0.1"));
 }
Пример #15
0
 public void リソース確認_4番目はPTRレコードとなる()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.InitLocalHost(sut);
     var o = (RrPtr) RrDbTest.Get(sut, 3);
     //verify
     Assert.That(o.DnsType, Is.EqualTo(DnsType.Ptr));
     Assert.That(o.Name, Is.EqualTo("1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA."));
     Assert.That(o.Ptr, Is.EqualTo("localhost."));
 }
Пример #16
0
 public void リソース確認_5番目はNSレコードとなる()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     RrDbTest.InitLocalHost(sut);
     var o = (RrNs) RrDbTest.Get(sut, 4);
     //verify
     Assert.That(o.DnsType, Is.EqualTo(DnsType.Ns));
     Assert.That(o.Name, Is.EqualTo("localhost."));
     Assert.That(o.NsName, Is.EqualTo("localhost."));
 }
Пример #17
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;
     }
 }
Пример #18
0
 public void 同一リソースの追加_TTLが0以外の場合は上書きされる()
 {
     //setUp
     var sut = new RrDb();
     //exercise
     var ttl = 10u; //最初のリソースはTTL=0以外
     sut.Add(new RrA("domain", ttl, new Ip("1.2.3.4")));
     sut.Add(new RrA("domain", 20, new Ip("1.2.3.4")));
     //verify
     Assert.That(RrDbTest.Size(sut), Is.EqualTo(1)); //件数は1件になる
     Assert.That(RrDbTest.Get(sut, 0).Ttl, Is.EqualTo(20)); //TTLは後から追加した20になる
 }
Пример #19
0
 //リフレクションを使用してプライベートメソッドにアクセスする RrDb.addNamedCaLine(string tmpName, string str)
 public static string AddNamedCaLine(RrDb sut, string tmpName, string str)
 {
     var type = sut.GetType();
     var func = type.GetMethod("AddNamedCaLine", BindingFlags.NonPublic | BindingFlags.Instance);
     try{
         return (string) func.Invoke(sut, new object[]{tmpName, str});
     } catch (Exception e){
         //リフレクションで呼び出したメソッドで例外が発生すると、System.Reflection.TargetInvocationException
         //でラップされて、InnerException プロパティに発生した例外が設定される
         throw e.InnerException;
     }
 }
Пример #20
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."));
        }
Пример #21
0
 public void 同一リソースの追加_TTLが0の場合は失敗する()
 {
     //setUp
     var sut = new RrDb();
     var expected = false; //失敗
     //exercise
     var ttl = 0u; //最初のリソースはTTL=0
     sut.Add(new RrA("domain", ttl, new Ip("1.2.3.4")));
     var actual = sut.Add(new RrA("domain", 100, new Ip("1.2.3.4")));
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #22
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("ここが実行されたらテスト失敗");
        }
Пример #23
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."));
        }
Пример #24
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."));
        }
Пример #25
0
 public void 異なるリソースの追加()
 {
     //setUp
     var sut = new RrDb();
     var expected = 3; //全部で3件になる
     //exercise
     sut.Add(new RrA("domain", 10, new Ip("1.2.3.4")));
     sut.Add(new RrA("domain", 10, new Ip("3.4.5.6")));
     sut.Add(new RrNs("domain", 10, "ns"));
     var actual = RrDbTest.Size(sut);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #26
0
        protected override bool OnStartServer()
        {
            //ルートキャッシュの初期化
            _rootCache = null;
            var namedCaPath = string.Format("{0}\\{1}", _kernel.ProgDir(), Conf.Get("rootCache"));
            if (File.Exists(namedCaPath)) {
                try {
                    //named.ca読み込み用コンストラクタ
                    var expire = (int) Conf.Get("soaExpire");
                    //var expire = (uint)Conf.Get("soaExpire");
                    _rootCache = new RrDb(namedCaPath, (uint) expire);
                    Logger.Set(LogKind.Detail, null, 6, namedCaPath);

                }
                catch (IOException) {
                    Logger.Set(LogKind.Error, null, 2, string.Format("filename={0}", namedCaPath));
                }
            }
            else {
                Logger.Set(LogKind.Error, null, 3, namedCaPath);
            }

            //設定したドメイン情報を初期化する
            if (_cacheList != null) {
                _cacheList.Clear();
            }
            _cacheList = new List<RrDb>();
            var op = _kernel.ListOption.Get("DnsDomain");
            if (op != null) {
                var domainList = (Dat) op.GetValue("domainList");
                if (domainList != null) {
                    foreach (OneDat o in domainList) {
                        if (o.Enable) {
                            //ドメインごとのリソースの読込
                            var domainName = o.StrList[0];
                            //Ver6.1.0
                            var authority = bool.Parse(o.StrList[1]);
                            var res = _kernel.ListOption.Get("Resource-" + domainName);
                            if (res != null) {
                                var resource = (Dat) res.GetValue("resourceList");
                                var rrDb = new RrDb(Logger, Conf, resource, domainName, authority);
                                _cacheList.Add(rrDb);
                                Logger.Set(LogKind.Detail, null, 21, "Resource-" + domainName);
                            }
                        }
                    }
                }
            }

            return true;
        }
Пример #27
0
        private List <OneRr> GetAllCname(RrDb rrDb, String name, List <OneRr> rrList)
        {
            var ar = rrDb.GetList(name, DnsType.Cname);

            if (ar.Count == 0)
            {
                return(rrList);
            }
            foreach (RrCname a in ar)
            {
                rrList.Add(a);
                rrList = GetAllCname(rrDb, a.CName, rrList);
            }
            return(rrList);
        }
Пример #28
0
 public void 追加に成功したばあのSOAレコードの検証()
 {
     //setUp
     RrDb sut = new RrDb();
     sut.Add(new RrNs("aaa.com.", 0, "ns.aaa.com."));
     //exercise
     RrDbTest.InitSoa(sut, "aaa.com.", "*****@*****.**", 1, 2, 3, 4, 5);
     //verify
     Assert.That(RrDbTest.Size(sut), Is.EqualTo(2)); //NS及びSOAの2件になっている
     RrSoa o = (RrSoa) RrDbTest.Get(sut, 1);
     Assert.That(o.NameServer, Is.EqualTo("ns.aaa.com."));
     Assert.That(o.PostMaster, Is.EqualTo("root.aaa.com.")); //変換が完了している(@=>. 最後に.追加)
     Assert.That(o.Serial, Is.EqualTo(1));
     Assert.That(o.Refresh, Is.EqualTo(2));
     Assert.That(o.Retry, Is.EqualTo(3));
     Assert.That(o.Expire, Is.EqualTo(4));
     Assert.That(o.Minimum, Is.EqualTo(5));
 }
Пример #29
0
 public void findによる検索_ヒットするデータが存在する場合()
 {
     //setUp
     var sut = new RrDb(null, null, null, "example.com", true);
     sut.Add(new RrA("www1.example.com.", 100, new Ip("192.168.0.1")));
     sut.Add(new RrA("www.example.com.", 100, new Ip("192.168.0.1")));
     var expected = true;
     //exercise
     var actual = sut.Find("www.example.com.", DnsType.A);
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
Пример #30
0
 //リフレクションを使用してプライベートメソッドにアクセスする RrDb.size()
 public static int Size(RrDb sut)
 {
     var type = sut.GetType();
     var func = type.GetMethod("Size", BindingFlags.NonPublic | BindingFlags.Instance);
     return (int) func.Invoke(sut, new object[]{});
 }
Пример #31
0
 //リフレクションを使用してプライベートメソッドにアクセスする RrDb.addOneDat(string,OneDat)
 public static bool InitSoa(RrDb sut, string domainName, string mail, uint serial, uint refresh, uint retry, uint expire, uint minimum)
 {
     var type = sut.GetType();
     var func = type.GetMethod("InitSoa", BindingFlags.NonPublic | BindingFlags.Instance);
     return (bool) func.Invoke(sut, new object[]{domainName, mail, serial, refresh, retry, expire, minimum});
 }
Пример #32
0
 //リフレクションを使用してプライベートメソッドにアクセスする RrDb.initLocalHost()
 public static void InitLocalHost(RrDb sut)
 {
     var type = sut.GetType();
     var func = type.GetMethod("InitLocalHost", BindingFlags.NonPublic | BindingFlags.Instance);
     func.Invoke(sut, new object[]{});
 }