【问题标题】:Nightwatchjs DNS request custom commandsNightwatchjs DNS 请求自定义命令
【发布时间】:2017-03-16 22:45:26
【问题描述】:

我正在尝试制作DNS requests(解析和反转)并对结果进行断言。

我连续运行两个类似的自定义命令,都执行dns.setServers() 函数以便能够为每个查询设置不同的 DNS 服务器

我遇到了这个已知问题: node: ../deps/cares/src/ares_destroy.c:102: ares__destroy_servers_state: Assertion ares__is_list_empty(&server->queries_to_server)' failed.

既然好像解决不了nodejs#894 -> c-ares#41.

我正在寻找解决方案,代码如下:

自定义命令dnsresolve

var util = require('util');
var events = require('events');
var dns = require ('dns');

var dnsresolve = function() {
  events.EventEmitter.call(this);
};

util.inherits(dnsresolve, events.EventEmitter);

dnsresolve.prototype.command = function(server, hostname, rrtype, callback) {
  var self = this;
  var server = server.split();

  dns.resolve(hostname, rrtype, function(err, result) {
    dns.setServers(server);
    if (result) {
      callback(result);
    } else {
      callback(err.code);
    }

    self.emit('complete');
  });

  return this;
};

module.exports = dnsresolve;

自定义命令dnsreverse

var util = require('util');
var events = require('events');
var dns = require ('dns');

var dnsreverse = function() {
  events.EventEmitter.call(this);
};

util.inherits(dnsreverse, events.EventEmitter);

dnsreverse.prototype.command = function(server, ip, callback) {
  var self = this;
  var server = server.split();

  dns.reverse(ip, function(err, result) {
    dns.setServers(server);
    if (result) {
      callback(result);
    } else {
      callback(err.code);
    }

    self.emit('complete');
  });

  return this;
};

module.exports = dnsreverse;

自定义命令调用:

'Browse' : function (browser) {
  browser
    .url('http://' + browser.globals.network.interfaces.em0.ip)
    .waitForElementVisible('#frameContent', 2000)
    .dnsresolve(browser.globals.network.interfaces.em0.ip, 'my.record', 'A', function(result) {
      browser.verify.equal(result, '1.1.1.1')
    })
    .dnsreverse(browser.globals.network.interfaces.em0.ip, '1.1.1.1', function(result) {
      browser.verify.equal(result, 'my.record')
    })
}

使用其他节点模块不是解决方案。

【问题讨论】:

    标签: node.js callback dns promise nightwatch.js


    【解决方案1】:

    我刚刚制作了这些命令,一些自定义断言:

    module.exports = {
      'resolve' : function(browser, server, hostname, rrtype, expect) {
        browser
        .dnsresolve(server, hostname, rrtype, function(result) {
          browser.verify.equal(result, expect)
        }).pause(10)
      },
      'reverse' : function(browser, server, ip, expect) {
        browser
        .dnsreverse(server, ip, function(result) {
          browser.verify.equal(result, expect)
        }).pause(10)
      }
    };
    

    添加 '.pause(10)' 是技巧,没有找到合适的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 2021-12-30
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多