使用NodeJS进行无根特权的Ping操作

时间:2019-09-10 16:22:20

标签: javascript node.js mocha travis-ci discord.js

我目前正在使用Discord机器人,但遇到一个问题,除非您具有root特权,否则我们的ping命令在Linux上不起作用。 问题是我们的CI解决方案(Travis-CI)使用Linux,并且出于安全原因,当前不允许我们以root用户身份运行测试。 我们正在使用摩卡咖啡进行测试。

代码如下:

const ping = require('net-ping');

function pingTarget(target, callback){
    // create a ping session used to try to reach backends
    // in case it doesn't exist (unit test)
    if(!session)
        session = ping.createSession(options);

    try {
        resolveHostname(target, (err, result) => {
            if(err){
                callback({
                    hostname: target,
                    ip: "DNS Resolve fail",
                }, err, 0);
            }

            session.pingHost(result, function (error, targetIP, sent, rcvd) {
                // get ping.
                var ms = rcvd - sent;

                // log for more details
                console.log(
                    "Pinged hostname : " + target +
                    " IP : " + result +
                    " Ping : " + ms + " ms."
                );

                // calls delegate with args
                callback(
                    {
                        hostname: target,
                        ip: targetIP
                    }, error, ms);
            });
        });
    } catch (error) {
        callback(
            {
                hostname: target,
                ip: "Ping fail"
            }, error, 0);
    }
}

这是测试:

describe("#pingServer()", () => {
    it("pings a server", () => {
        status.pingTarget(
            "localhost",
            (target, error, ms) => {
                expect(error).to.be.a('null');
                expect(ms).to.be.below(5);
            }
        );
    });
});

是否可以在不需要root特权的情况下ping通远程主机?如果不是,是否有任何方法可以使测试可选,以确保CI构建不会失败?

谢谢!

0 个答案:

没有答案