'use strict';

var setTimeout = require('timers').setTimeout;

var allocCluster = require('./lib/alloc-cluster.js');

allocCluster.test('end response with error frame', {
    numPeers: 2
}, function t(cluster, assert) {
    var client = cluster.channels[0];
    var server = cluster.channels[1];

    server.makeSubChannel({
        serviceName: 'stream'
    }).register('stream', {
        streamed: true
    }, streamHandler);

    var req = client.request({
        serviceName: 'stream',
        host: server.hostPort,
        streamed: true
    });

    req.arg1.end('stream');
    req.arg2.end();
    req.arg3.end();

    req.on('response', onResponse);
    req.on('error', onError);

    function onResponse(resp) {
        assert.ok(resp);

        resp.on('finish', onResponseFinished);
        resp.on('error', onResponseError);

        function onResponseFinished() {
            assert.ok(false, 'expected no finished event');
        }

        function onResponseError(err) {
            assert.equal(err.message, 'oops');

            assert.end();
        }
    }

    function onError(err) {
        assert.ifError(err);
        assert.ok(false, 'expected no req error event');
    }

    function streamHandler(inreq, buildRes) {
        var res = buildRes({
            streamed: true
        });

        res.arg1.end();
        res.arg2.end();

        res.arg3.write('a message');

        setTimeout(function datTime() {
            res.sendError('UnexpectedError', 'oops');
        }, 500);
    }
});

@@ -1,8 +1,1130 @@
+// Copyright (c) 2015 Uber Technologies, Inc.%0A//%0A// Permission is hereby granted, free of charge, to any person obtaining a copy%0A// of this software and associated documentation files (the %22Software%22), to deal%0A// in the Software without restriction, including without limitation the rights%0A// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell%0A// copies of the Software, and to permit persons to whom the Software is%0A// furnished to do so, subject to the following conditions:%0A//%0A// The above copyright notice and this permission notice shall be included in%0A// all copies or substantial portions of the Software.%0A//%0A// THE SOFTWARE IS PROVIDED %22AS IS%22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR%0A// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,%0A// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE%0A// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER%0A// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,%0A// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN%0A// THE SOFTWARE.%0A%0A
 'use str

add blurb