LCOV - code coverage report
| Current view: | directory - /home/trostler/JUTE/backend/nodejute/jute/actions - prune.js (source / functions) |  | Found | Hit | Coverage |
| Test: | lcov.info | Lines: | 53 | 52 | 98.11 %
| Date: | Tue Aug 09 16:58:56 GMT-07:00 2011 | Functions: | 4 | 4 | 100.0 %
| Colors: | not hit hit

                 1          : /*
                 2          : Copyright (c) 2011, Yahoo! Inc.
                 3          : All rights reserved.
                 4          :
                 5          : Redistribution and use of this software in source and binary forms,
                 6          : with or without modification, are permitted provided that the following
                 7          : conditions are met:
                 8          :
                 9          : * Redistributions of source code must retain the above
                10          :   copyright notice, this list of conditions and the
                11          :   following disclaimer.
                12          :
                13          : * Redistributions in binary form must reproduce the above
                14          :   copyright notice, this list of conditions and the
                15          :   following disclaimer in the documentation and/or other
                16          :   materials provided with the distribution.
                17          :
                18          : * Neither the name of Yahoo! Inc. nor the names of its
                19          :   contributors may be used to endorse or promote products
                20          :   derived from this software without specific prior
                21          :   written permission of Yahoo! Inc.
                22          :
                23          : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
                24          : IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                25          : TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
                26          : PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
                27          : OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                28          : SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
                29          : LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                30          : DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                31          : THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                32          : (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
                33          : OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                34          : */
                35          :
                36          :
                37        1 : module.exports = {
                38          :     Create:  function(hub, common) {
                39          :         // Javascript is single threaded!  We don't have to worry about concurrency!
                40        1 :         var TEST_TIME_THRESHOLD = 60000,    // 60 seconds to wait before declaring test dead
                41          :             BROWSER_TIME_THRESHOLD = 20000, // Delete a captured browser after it has been gone for this long - 20 seconds
                42          :             ERROR = '<?xml version="1.0" encoding="UTF-8"?><testsuites><testsuite name="BROWSER" tests="0" failures="1" time="0">Test Timed Out: Most likely a Javascript parsing error - try loading URL in your browser</testsuite></testsuites>',
                43          :             path = require('path')
                44          :         ;
                45          :
                46          :         // Events I care about
                47        1 :         hub.addListener('action:prune', prune);
                48          :
                49        1 :         function prune(doing_what, req, cache) {
                50        5 :             var redirect;
                51        5 :             if (doing_what != 'status') {
                52        4 :                 prune_browsers(req, cache);
                53        4 :                 redirect = prune_tests(doing_what, req, cache);
                54        4 :                 hub.emit('pruneDone', redirect);
                55          :             }
                56          :         }
                57          :
                58        1 :         function prune_tests(doing_what, req, cache) {
                59        4 :             var now = new Date().getTime(),
                60          :                 browser = req.session.uuid, test,
                61          :                 timeStarted;
                62          :
                63        4 :             for (var i = 0; i< cache.tests_to_run.length; i++) {
                64        3 :                 test = cache.tests_to_run[i];
                65        3 :                 timeStarted = test.running;
                66        3 :                 if (timeStarted) {
                67        1 :                     if (now - timeStarted > TEST_TIME_THRESHOLD) {
                68          :                         // This test has been running for too long!!
                69        1 :                         hub.emit(hub.LOG, hub.ERROR, "Test running for too long - killing it");
                70        1 :                         cache.tests_to_run.splice(i, 1);
                71        1 :                         if (test.sendOutput) {
                72        0 :                             hub.emit('sendOutput', test.sendOutput, test.url + ' timed out - javascript error?');
                73          :                         }
                74          :
                75          :                         // Dump a FAILED XML file
                76          :                         // Use test file name as the NAME of this test (vs. component name from test itself)
                77        1 :                         var parts = test.url.split('/');
                78        1 :                         var name  = parts.pop();
                79        1 :                         name = name.replace(/\..*$/, '');   // get rid of suffix
                80        1 :                         var names = common.makeSaneNames(common.browserName(req));
                81        1 :                         var err = ERROR;
                82        1 :                         err = err.replace('BROWSER', names[1]);
                83        1 :                         err = err.replace('URL', test.url);
                84        1 :                         var params  = { results: err, name: name };
                85          :
                86        1 :                         hub.emit(hub.log, hub.ERROR,  "Dumped error unit test file " + name + " / " + names[0] + " (from " + test.url + ")");
                87        1 :                         common.dumpFile(params, 'results', names[0] + '-test.xml', name);
                88          :
                89        1 :                         if (cache.browsers[browser]) {
                90        1 :                             cache.browsers[browser].heart_beat = now;
                91        1 :                             cache.browsers[browser].get_test   = now;
                92        1 :                             return 1;   //Redirect!
                93          :                         }
                94          :                     }
                95          :                 } else {
                96          :                     // make sure browser is still requesting tests
                97        2 :                    if (cache.browsers[browser]) {
                98        2 :                         var last_got_test = cache.browsers[browser].get_test;
                99        2 :                         if (doing_what != 'get_test' && (now - last_got_test > TEST_TIME_THRESHOLD)) {
               100        1 :                             hub.emit(hub.LOG, hub.ERROR, "Been too long since you've requested a test: " + browser + " - Kicking iframe...");
               101        1 :                             return 1;  // Redirect!!
               102          :                         }
               103          :                    }
               104          :                 }
               105          :             }
               106          :         }
               107          :
               108        1 :         function prune_browsers(req, cache) {
               109        4 :             var now = new Date().getTime(), me = req.session.uuid;
               110          :
               111        4 :             if (typeof cache.browsers == 'object') {
               112        4 :                 for (browser in cache.browsers) {
               113        5 :                     if (browser == me) continue;
               114          :
               115        2 :                     var b_time = cache.browsers[browser].heart_beat;
               116        2 :                     if (now - b_time > BROWSER_TIME_THRESHOLD) {
               117        1 :                         hub.emit(hub.LOG, hub.ERROR,  "We lost browser " + cache.browsers[browser].name);
               118        1 :                         delete cache.browsers[browser];
               119          :                         // take it out of ay tests it's supposed to be running
               120        1 :                         for (var i = 0; i < cache.tests_to_run.length; i++) {
               121        1 :                                 var test = cache.tests_to_run[i];
               122        1 :                                 if (test.browser == browser) {
               123          :                                     // blow this test out!
               124        1 :                                     cache.tests_to_run.splice(i, 1);
               125        1 :                                     i--; // fake a perl 'redo'!!  Otherwise we might skip over something!
               126          :                                 }
               127          :                             }
               128          :                     }
               129          :                 }
               130          :             }
               131          :         }
               132          :     }
               133          : };
               134          :

Generated by: YUI Test