Example #1
0
    t.test('setup listener', function (t2) {
        var count = 0;

        t2.plan(CF_RESOURCES.length);

        FEED = mod_changefeed.createListener({
            log: LOG,
            url: 'http://localhost:' + NAPI.client.url.port,
            instance: INSTUUID,
            service: 'napi-tests',
            resources: CF_RESOURCES,
            backoff: {
                maxTimeout: 10000,
                minTimeout: 2000,
                retries: Infinity
            }
        });

        FEED.on('bootstrap', function (bs) {
            t2.ok(bs, 'bootstrap object returned');
            if (++count === CF_RESOURCES.length) {
                t2.end();
            }
        });

        FEED.register();
    });
Example #2
0
exports.listen_for_destroy = function (t) {
    t.expect(4);
    var opts = { path: '/vms/' + VM.uuid };
    var listener = changefeed.createListener(listenerOpts);
    listener.register();

    listener.on('bootstrap', function () {
        client.del(opts, function (err, req, res, body) {
            common.ifError(t, err);
            t.equal(res.statusCode, 202, '202 Accepted');
            common.checkHeaders(t, res.headers);
            t.ok(body, 'bootstrap body');
        });
    });

    var noStateReceived = true;
    listener.on('readable', function () {
        var changeItem = listener.read();
        var changeKind = changeItem.changeKind;
        if (noStateReceived &&
            changeItem.changedResourceId === VM.uuid &&
            changeKind.subResources &&
            changeKind.subResources.indexOf('destroyed') !== -1) {
            t.ok(true, 'destroyed received');
            noStateReceived = false;
            listener._endSocket();
            t.done();
        }
    });
};
Example #3
0
exports.listen_for_tags = function (t) {
    t.expect(2);
    VM.tags.test_tag = 'test';
    var opts = { path: '/vms/' + VM.uuid + '?server_uuid=' + VM.server_uuid };
    var listener = changefeed.createListener(listenerOpts);
    listener.register();

    listener.on('bootstrap', function () {
        client.put(opts, VM, function (err, req, res) {
            common.ifError(t, err);
        });
    });

    var noStateReceived = true;
    listener.on('readable', function () {
        var changeItem = listener.read();
        var changeKind = changeItem.changeKind;
        if (noStateReceived &&
            changeItem.changedResourceId === VM.uuid &&
            changeKind.subResources &&
            changeKind.subResources.indexOf('tags') !== -1) {
            t.ok(true, 'tags received');
            noStateReceived = false;
            listener._endSocket();
            t.done();
        }
    });
};
Example #4
0
exports.listen_for_reboot_state = function (t) {
    t.expect(5);
    var params = {
        action: 'reboot'
    };

    var opts = createOpts('/vms/' + VM.uuid + '?action=reboot', params);
    var listener = changefeed.createListener(listenerOpts);
    listener.register();

    listener.on('bootstrap', function () {
        client.post(opts, params, function (err, req, res, body) {
            common.ifError(t, err);
            t.equal(res.statusCode, 202, '202 Accepted');
            common.checkHeaders(t, res.headers);
            t.ok(body, 'bootstrap body');
            t.ok(body.job_uuid, 'job_uuid: ' + body.job_uuid);
        });
    });
    var noStateReceived = true;
    listener.on('readable', function () {
        var changeItem = listener.read();
        var changeKind = changeItem.changeKind;
        if (noStateReceived &&
            changeItem.changedResourceId === VM.uuid &&
            changeKind.subResources &&
            changeKind.subResources.indexOf('state') !== -1) {
            t.ok(true, 'state received');
            noStateReceived = false;
            listener._endSocket();
            t.done();
        }
    });
};
Example #5
0
exports.create_vm = function (t) {
    t.expect(5);
    var md = {
        foo: 'bar',
        credentials: JSON.stringify({ 'user_pw': '12345678' })
    };

    jobLocation = null;

    VM = {
        alias: 'sdcvmapitest_create_vm_' + process.pid,
        uuid: uuid.create(),
        owner_uuid: CUSTOMER,
        image_uuid: IMAGE,
        networks: [ { uuid: ADMIN_NETWORK.uuid } ],
        brand: 'joyent-minimal',
        billing_id: '00000000-0000-0000-0000-000000000000',
        ram: 64,
        quota: 10,
        cpu_cap: 100,
        customer_metadata: md,
        creator_uuid: CUSTOMER,
        role_tags: ['fd48177c-d7c3-11e3-9330-28cfe91a33c9']
    };

    var opts = createOpts('/vms', VM);

    var listener = changefeed.createListener(listenerOpts);
    listener.register();

    listener.on('bootstrap', function () {
        client.post(opts, VM, function (err, req, res, body) {
            common.ifError(t, err);
            t.equal(res.statusCode, 202, '202 Accepted');
            common.checkHeaders(t, res.headers);
            t.ok(res.headers['workflow-api'], 'workflow-api header');
            t.ok(body, 'vm ok job: ' + body.job_uuid);

            jobLocation = '/jobs/' + body.job_uuid;
            done();
        });
    });

    listener.on('readable', function () {
        var changeItem;
        while ((changeItem = listener.read())) {
            processChangeItem(changeItem);
        }
    });

    var stateReceived = false;

    /*
     * It doesn't matter if the request return or the change feed event occurs
     * first as long as they both occur.
     */
    function done() {
        if (jobLocation !== null && stateReceived) {
            t.done();
        }
    }

    function processChangeItem(changeItem) {
        var changeKind = changeItem.changeKind;
        if (!stateReceived &&
            changeItem.changedResourceId === VM.uuid &&
            changeKind.subResources &&
            changeKind.subResources.indexOf('state') !== -1) {

            t.ok(true, 'state received');
            stateReceived = true;
            listener._endSocket();
            done();
        }
    }
};