Changeset 1545:cde406e61e48 in nginx-tests


Ignore:
Timestamp:
01/16/20 16:15:26 (5 weeks ago)
Author:
Dmitry Volyntsev <xeioex@…>
Branch:
default
Phase:
public
Message:

Tests: adapted js_subrequests.t to njs changes after 0.3.8.

Since 0.3.8 if callback is not provided for r.subrequest()
a promise is returned.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • js_subrequests.t

    r1544 r1545  
    6060        }
    6161
     62        location /sr_pr {
     63            js_content sr_pr;
     64        }
     65
    6266        location /sr_args {
    6367            js_content sr_args;
     
    6872        }
    6973
     74        location /sr_options_args_pr {
     75            js_content sr_options_args_pr;
     76        }
     77
    7078        location /sr_options_method {
    7179            js_content sr_options_method;
    7280        }
    7381
     82        location /sr_options_method_pr {
     83            js_content sr_options_method_pr;
     84        }
     85
    7486        location /sr_options_body {
    7587            js_content sr_options_body;
     
    8496        }
    8597
     98        location /sr_body_pr {
     99            js_content sr_body_pr;
     100        }
     101
    86102        location /sr_body_special {
    87103            js_content sr_body_special;
    88         }
    89 
    90         location /sr_background {
    91             js_content sr_background;
    92104        }
    93105
     
    107119        }
    108120
     121        location /sr_js_in_subrequest_pr {
     122            js_content sr_js_in_subrequest_pr;
     123        }
     124
    109125        location /sr_file {
    110126            js_content sr_file;
     
    118134        location /sr_unavail {
    119135            js_content sr_unavail;
     136        }
     137
     138        location /sr_unavail_pr {
     139            js_content sr_unavail_pr;
    120140        }
    121141
     
    217237        }
    218238
    219         location /background {
    220             js_content background;
    221         }
    222 
    223239        location /delayed {
    224240            js_content delayed;
     
    243259    function sr(r) {
    244260        subrequest_fn(r, ['/p/sub2'], ['uri', 'status'])
     261    }
     262
     263    function sr_pr(r) {
     264        r.subrequest('/p/sub1', 'h=xxx')
     265        .then(reply => r.return(200, JSON.stringify({h:reply.headersOut.h})))
    245266    }
    246267
     
    257278    }
    258279
     280    function sr_options_args_pr(r) {
     281        r.subrequest('/p/sub1', {args:'h=xxx'})
     282        .then(reply => r.return(200, JSON.stringify({h:reply.headersOut.h})))
     283    }
     284
    259285    function sr_options_method(r) {
    260286        r.subrequest('/p/method', {method:r.args.m}, body_fwd_cb);
     287    }
     288
     289    function sr_options_method_pr(r) {
     290        r.subrequest('/p/method', {method:r.args.m})
     291        .then(body_fwd_cb);
    261292    }
    262293
     
    277308    }
    278309
     310    function sr_body_pr(r) {
     311        r.subrequest('/p/sub1')
     312        .then(body_fwd_cb);
     313    }
     314
    279315    function sr_body_special(r) {
    280316        r.subrequest('/p/sub2', body_fwd_cb);
    281     }
    282 
    283     function sr_background(r) {
    284         r.subrequest('/p/background');
    285         r.subrequest('/p/background', 'a=xxx');
    286         r.subrequest('/p/background', {args: 'a=yyy', method:'POST'});
    287 
    288         r.return(200);
    289317    }
    290318
     
    296324        setTimeout(r => r.return(200), 100, r);
    297325     }
    298 
    299     function background(r) {
    300         r.log("BACKGROUND: " + r.variables.request_method
    301                 + " args: " + r.variables.args);
    302 
    303         r.return(200);
    304     }
    305326
    306327    function sr_in_variable_handler(r) {
     
    327348    }
    328349
     350    function sr_unavail_pr(req) {
     351        subrequest_fn_pr(req, ['/unavail'], ['uri', 'status']);
     352    }
     353
    329354    function sr_broken(r) {
    330355        r.subrequest('/daemon/unfinished', reply => {
     
    345370    }
    346371
     372    function sr_js_in_subrequest_pr(r) {
     373        r.subrequest('/js_sub')
     374        .then(body_fwd_cb);
     375    }
     376
    347377    function sr_in_sr_callback(r) {
    348378        r.subrequest('/return', function (reply) {
     
    376406    }
    377407
     408    function collect(replies, props, total, reply) {
     409        reply.log(`subrequest handler: \${reply.uri} status: \${reply.status}`)
     410
     411        var rep = {};
     412        props.forEach(p => {rep[p] = reply[p]});
     413
     414        replies.push(rep);
     415
     416        if (replies.length == total) {
     417            reply.parent.return(200, JSON.stringify(replies));
     418        }
     419    }
     420
    378421    function subrequest_fn(r, subs, props) {
    379         var rep, replies = [];
    380 
    381         subs.forEach(sr => {
    382             r.subrequest(sr, reply => {
    383                 r.log("subrequest handler: " + reply.uri
    384                         + " status: " + reply.status)
    385 
    386                 rep = {};
    387                 props.forEach(p => {rep[p] = reply[p]});
    388 
    389                 replies.push(rep);
    390 
    391                 if (replies.length == subs.length) {
    392                     r.return(200, JSON.stringify(replies));
    393                 }
    394             });
    395         });
     422        var replies = [];
     423
     424        subs.forEach(sr =>
     425                     r.subrequest(sr, collect.bind(null, replies,
     426                                                   props, subs.length)));
     427    }
     428
     429    function subrequest_fn_pr(r, subs, props) {
     430        var replies = [];
     431
     432        subs.forEach(sr => r.subrequest(sr)
     433            .then(collect.bind(null, replies, props, subs.length)));
    396434    }
    397435
     
    424462$t->write_file('t', '["SEE-THIS"]');
    425463
    426 $t->try_run('no njs available')->plan(24);
     464$t->try_run('no njs available')->plan(29);
    427465$t->run_daemon(\&http_daemon);
    428466
     
    462500        'sr_multi');
    463501
    464 http_get('/sr_background');
     502TODO: {
     503local $TODO = 'not yet'
     504        unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.3.8';
     505
     506is(get_json('/sr_pr'), '{"h":"xxx"}', 'sr_promise');
     507is(get_json('/sr_options_args_pr'), '{"h":"xxx"}', 'sr_options_args_pr');
     508is(get_json('/sr_options_method_pr?m=PUT'), '["PUT"]', 'sr method PUT');
     509is(get_json('/sr_body_pr'), '{"a":{"b":1}}', 'sr_body_pr');
     510is(get_json('/sr_js_in_subrequest_pr'), '["JS-SUB"]', 'sr_js_in_subrequest_pr');
     511is(get_json('/sr_unavail_pr'), '[{"status":502,"uri":"/unavail"}]',
     512        'sr_unavail_pr');
     513
     514}
    465515
    466516http_get('/sr_broken');
     
    486536ok(index($t->read_file('error.log'), 'failed to convert args') > 0,
    487537        'subrequest invalid args exception');
    488 ok(index($t->read_file('error.log'), 'BACKGROUND') > 0,
    489         'background subrequest');
    490538ok(index($t->read_file('error.log'), 'too big subrequest response') > 0,
    491539        'subrequest too large body');
Note: See TracChangeset for help on using the changeset viewer.