exports.testSendMessageOneRecipientResend = function() {
    var requestData = null;
    var semaphore = new Semaphore();
    app.post("/", function(req) {
        requestData = req.postParams;
        if (requestData.registration_ids.length == 3) {
            return response.json(createResponse([createSuccess(), createError("Unavailable"), createSuccess()]));
        } else if (requestData.registration_ids.length == 1) {
            return response.json(createResponse([createSuccess()]));
        } else {
            return response.json({}).error();
        }
    });
    
    var resent;
    md.on("messageRescheduled", function(arr) {
        resent = arr;
        semaphore.signal();
    });
    md.on("messageSent", function() {
        semaphore.signal();
    });
    md.start();
    var msg = new Message("daMessage");
    msg.addRecipients(["42", "43", "44"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(1000, 2), "Send message");
    assert.equal(md.services.gcm.queue.total(), 1);
    assert.isTrue(semaphore.tryWait(11500), "Wait for resent message");
    assert.deepEqual(requestData.registration_ids, ["43"]);
    assert.equal(md.services.gcm.queue.total(), 0);
};
Exemplo n.º 2
0
exports.testPromiseList = function() {
    var d1 = defer(), d2 = defer(), d3 = defer(), done = defer();
    var l = promises(d1.promise, d2.promise, d3); // promiseList should convert d3 to promise
    var semaphore = new Semaphore();
    var result;
    l.then(function(value) {
        done.resolve(value);
    }, function(error) {
        done.resolve("promises called error callback", true);
    });
    done.promise.then(function(value) {
        result = value;
        semaphore.signal();
    });
    // Resolve promise in worker so async promise callbacks get called
    var worker = new Worker({
        onmessage: function() {
            d2.resolve(1);
            d3.resolve("error", true);
            d1.resolve("ok");
        }
    });
    worker.postMessage();
    // wait for last promise to resolve
    if (!semaphore.tryWait(1000)) {
        assert.fail("timed out");
    }
    // make sure promises have resolved via chained callback
    assert.deepEqual(result, [{value: "ok"}, {value: 1}, {error: "error"}]);
    worker.terminate();
};
Exemplo n.º 3
0
exports.testPromiseList = function() {
    var d1 = Deferred(), d2 = Deferred(), d3 = Deferred(), done = Deferred();
    var l = PromiseList(d1.promise, d2.promise, d3); // PromiseList should convert d3 to promise
    var semaphore = new Semaphore();
    var result;
    l.then(function(value) {
        done.resolve(value);
    }, function(error) {
        done.resolve("promises called error callback", true);
    });
    done.promise.then(function(value) {
        result = value;
        semaphore.signal();
    });
    // Resolve promises in thread so async promise callbacks get called
    spawn(function() {
        d2.resolve(1);
        d3.resolve("error", true);
        d1.resolve("ok");
    });
    // wait for last promise to resolve
    if (!semaphore.tryWait(1000)) {
        assert.fail("timed out");
    }
    // make sure promises have resolved via chained callback
    assert.deepEqual(result, [{value: "ok"}, {value: 1}, {error: "error"}]);
};
Exemplo n.º 4
0
exports.testPromise = function() {
    var d1 = new Deferred(), d2 = new Deferred();
    var semaphore = new Semaphore();
    var v1, v2, e2;
    d1.promise.then(function(value) {
        v1 = value;
        semaphore.signal();
    });
    d2.promise.then(function(value) {
        v2 = value;
    }, function(error) {
        e2 = error;
        semaphore.signal();
    });
    // Resolve promise in thread so async promise callbacks get called
    spawn(function() {
        d1.resolve("value");
        d2.resolve("error", true);
    });
    // wait for promises to resolve
    if (!semaphore.tryWait(1000, 2)) {
        assert.fail("timed out");
    }
    // make sure promises have resolved via chained callback
    assert.equal(v1, "value");
    assert.equal(v2, undefined);
    assert.equal(e2, "error");
};
Exemplo n.º 5
0
exports.testPromise = function() {
    var d1 = defer(), d2 = defer();
    var semaphore = new Semaphore();
    var v1, v2, e2;
    d1.promise.then(function(value) {
        v1 = value;
        semaphore.signal();
    });
    d2.promise.then(function(value) {
        v2 = value;
    }, function(error) {
        e2 = error;
        semaphore.signal();
    });
    // Resolve promise in worker so async promise callbacks get called
    var worker = new Worker({
        onmessage: function() {
            d1.resolve("value");
            d2.resolve("error", true);
        }
    });
    worker.postMessage();
    // wait for promises to resolve
    if (!semaphore.tryWait(1000, 2)) {
        assert.fail("timed out");
    }
    // make sure promises have resolved via chained callback
    assert.equal(v1, "value");
    assert.equal(v2, undefined);
    assert.equal(e2, "error");
    worker.terminate();
};
exports.testSendMessageNormal = function() {
    var requestData = null;
    var auth = null;
    var semaphore = new Semaphore();

    app.post("/", function(req) {
        requestData = req.postParams;
        auth = req.headers.authorization;
        return response.json(createResponse([createSuccess()]));
    });

    var signal = function() {
        semaphore.signal();
    };
    md.on("messageSent", signal);
    md.start();
    var msg = new Message({message: "daMessage"});
    msg.on("success", signal);
    try {
        md.sendMessage(msg);
        assert.fail("sendMessage with Message without recipients should throw Error");
    } catch(e) {}
    msg.addRecipients(["42"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(1000, 2), "Send message");
    assert.deepEqual(requestData, {
        registration_ids: ["42"],
        data: {message: "daMessage"},
        dry_run: true // because testmode is set to true
    });
    assert.equal(auth, "key=theKey");
};
 md.on("idUnhandledError", function(oid, err, plattform) {
     ids[oid] = true;
     error = err;
     if (plattform != "gcm") {
         plattformOk = false;
     }
     semaphore.signal();
 });
exports.testSendMessageErrorConnect = function() {
    server.stop();
    server = null;
    var semaphore = new Semaphore();
    md.on("messageSent", function() {
        assert.fail();
    });
    md.on("errorConnect", function() {
        semaphore.signal();
    });
    md.on("error500", function() {
        semaphore.signal();
        // FIXME: current behavior of httpclient
        // returns a status 500 response for timeouts
    });
    md.start();
    var msg = new Message("daMessage");
    msg.addRecipients(["42"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(10000), "Handle connection failed");
    assert.equal(md.services.gcm.queue.total(), 1);
};
exports.testSendMessageRegistrationIdProbUnrecoverableError = function() {
    var requestData = null;
    var semaphore = new Semaphore();
    app.post("/", function(req) {
        requestData = req.postParams;
        return response.json(createResponse([createSuccess(), createError("Blah"), createSuccess()]));
    });
    var plattformOk = true;
    var signal = function() {
        semaphore.signal();
    };
    var ids = {
            "42": false,
            "43": false,
            "44": false
    };
    var error;
    md.on("idUnhandledError", function(oid, err, plattform) {
        ids[oid] = true;
        error = err;
        if (plattform != "gcm") {
            plattformOk = false;
        }
        semaphore.signal();
    });
    md.start();
    var msg = new Message("daMessage");
    msg.on("success", signal);
    msg.on("idUnhandledError", signal);
    msg.addRecipients(["42", "43", "44"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(1000, 3), "Send message");
    assert.deepEqual(ids, {
        "42": false,
        "43": true,
        "44": false
    });
    assert.equal(error, "Blah");
};
exports.testSendMessageRegistrationIdChange = function() {
    var requestData = null;
    var semaphore = new Semaphore();
    app.post("/", function(req) {
        requestData = req.postParams;
        return response.json(createResponse([createSuccess(), createSuccess("21"), createSuccess()]));
    });
    
    var ids = {
            "42": false,
            "43": false,
            "44": false
    };
    var signal = function() {
        semaphore.signal();
    };
    var plattformOk = true;
    md.on("idChange", function(oid, nid, plattform) {
        ids[oid] = nid;
        if (plattform != "gcm") {
            plattformOk = false;
        }
        signal();
    });
    md.start();
    var msg = new Message("daMessage");
    msg.on("idChange", signal);
    msg.on("success", signal);
    msg.addRecipients(["42", "43", "44"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(1000, 3), "Send message");
    assert.isTrue(plattformOk);
    assert.deepEqual(ids, {
        "42": false,
        "43": "21",
        "44": false
    });
};
var testError = function(err) {
    var requestData = null;
    var semaphore = new Semaphore(0);
    app.post("/", function(req) {
        requestData = req.postParams;
        var res = response.json({});
        res.status = err;
        return res;
    });
    md.on("messageSent", function() {
        assert.fail();
    });
    var signal = function() {
        semaphore.signal();
    };
    md.on("error" + err, signal);
    md.start();
    var msg = new Message("daMessage");
    msg.on("failed", signal);
    msg.addRecipients(["42"]);
    md.sendMessage(msg);
    assert.isTrue(semaphore.tryWait(1000, 2), "Handle http " + err);
    assert.equal(md.services.gcm.queue.total(), 0);
};
Exemplo n.º 12
0
 }, function(error) {
     e2 = error;
     semaphore.signal();
 });
 var signal = function() {
     semaphore.signal();
 };
 md.on("messageSent", function() {
     semaphore.signal();
 });
 md.on("error500", function() {
     semaphore.signal();
     // FIXME: current behavior of httpclient
     // returns a status 500 response for timeouts
 });
 md.on("errorConnect", function() {
     semaphore.signal();
 });
Exemplo n.º 17
0
 done.promise.then(function(value) {
     result = value;
     semaphore.signal();
 });
Exemplo n.º 18
0
 d1.promise.then(function(value) {
     v1 = value;
     semaphore.signal();
 });
 md.on("messageRescheduled", function(arr) {
     resent = arr;
     semaphore.signal();
 });