Exemplo n.º 1
0
        public void SearchInWhoisAsync()
        {
            Domain domain = new Domain()
            {
                Name      = "umbler.com",
                Ip        = "187.84.237.146",
                UpdatedAt = DateTime.Now,
                WhoIs     = "Domain Name: UMBLER.COM\nRegistry Domain ID: 1805958813_DOMAIN_COM - VRSN\nRegistrar WHOIS Server: whois.publicdomainregistry.com\nRegistrar URL: www.publicdomainregistry.com\nUpdated Date: 2019 - 04 - 16T14: 20:33Z\nCreation Date: 2013 - 06 - 03T20: 42:15Z\nRegistrar Regi",
                Ttl       = 60,
                HostedAt  = "Umbler Provedor Internet LTDA",
            };

            string domainName = "umbler.com.br";

            Mock <SearchWhois> mock = new Mock <SearchWhois>();

            mock.Setup(m => m.SearchInWhoisAsync(domainName)).Returns(Task.FromResult(domain));

            SearchWhois verif = new SearchWhois();

            var resultadoEsperado = mock.Object.SearchInWhoisAsync(domainName);
            var resultado         = verif.SearchInWhoisAsync(domainName);

            Assert.AreEqual(resultado, resultadoEsperado);
        }
        public async Task <IActionResult> Get(string domainName)
        {
            //procura se já tenho esse domínio no banco
            var whois  = new SearchWhois();
            var domain = await _db.SearchDomain(_db, domainName);

            //se não encontrou o domínio no banco, pesquisa no whois e salva no banco
            if (domain == null)
            {
                domain = await whois.SearchInWhoisAsync(domainName);

                if (domain.Name == "Error")
                {
                    return(BadRequest(domain.WhoIs));
                }
                _db.Domains.Add(domain);
            }

            var hora = DateTime.Now.Subtract(domain.UpdatedAt).TotalMinutes;

            //se já esgotou o ttl do domínio, preciso pesquisar novamente no whois e atualizar no banco.
            if (hora > domain.Ttl)
            {
                var domain2 = await whois.SearchInWhoisAsync(domainName);

                domain.Name      = domain2.Name;
                domain.Ip        = domain2.Ip;
                domain.UpdatedAt = DateTime.Now;
                domain.WhoIs     = domain2.WhoIs;
                domain.Ttl       = domain2.Ttl;
                domain.HostedAt  = domain2.HostedAt;
            }

            //repasso os dados do domínio para minha ViewModel
            var domainView = new DomainViewModel
            {
                Name     = domain.Name,
                Ip       = domain.Ip ?? "n/a",
                WhoIs    = domain.WhoIs,
                HostedAt = domain.HostedAt ?? "n/a"
            };

            //aguardando atualizar o banco
            await _db.SaveChangesAsync();

            //retornando a view com o domínio
            return(Ok(domainView));
        }
Exemplo n.º 3
0
        public void SearchInWhoisAsync()
        {
            //definição da string

            Domain domain = new Domain()
            {
                Name      = "umbler.com",
                Ip        = "187.84.237.146",
                UpdatedAt = DateTime.Now,
                WhoIs     = "Domain Name: UMBLER.COM\nRegistry Domain ID: 1805958813_DOMAIN_COM - VRSN\nRegistrar WHOIS Server: whois.publicdomainregistry.com\nRegistrar URL: www.publicdomainregistry.com\nUpdated Date: 2019 - 04 - 16T14: 20:33Z\nCreation Date: 2013 - 06 - 03T20: 42:15Z\nRegistrar Regi",
                Ttl       = 60,
                HostedAt  = "Umbler Provedor Internet LTDA",
            };

            string domainName = "umbler.com";


            //Criação do objeto Mock, que utiliza a interface ISearchWhois, sendo, então, fortemente tipado.
            //Vale ressaltar que o objeto Mock poderia emular qualquer implementação da interface definida, caso existisse mais de uma;
            Mock <ISearchWhois> mock = new Mock <ISearchWhois>();

            //Realização do setup de objeto Mock, que foi definido para esperar um retorno de produto barato.
            //Note que, independentemente do valor do preço no objeto produtoBarato, o valor de retorno do objeto Mock será sempre a string “Produto barato!”, pois assim foi definido;
            mock.Setup(m => m.SearchInWhoisAsync(domainName)).Returns(domain);

            //Criação do objeto SearchWhois para comparação posterior;
            SearchWhois verif = new SearchWhois();

            //Execução do método SearchInWhoisAsync no objeto Mock;
            var resultadoEsperado = mock.Object.SearchInWhoisAsync(domainName);

            //Execução do método SearchInWhoisAsync no objeto normal;
            var resultado = verif.SearchInWhoisAsync(domainName);

            //Seção assert do teste, que faz com que o teste passe caso os resultados sejam iguais.
            Assert.AreEqual(resultado, resultadoEsperado);
        }