LCOV - code coverage report
| Current view: | directory - /home/trostler/JUTE/backend/nodejute/jute - configure.js (source / functions) |  | Found | Hit | Coverage |
| Test: | lcov.info | Lines: | 58 | 53 | 91.38 %
| Date: | Mon Aug 08 11:00:25 GMT-07:00 2011 | Functions: | 4 | 3 | 75.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) {
                39        1 :     path = require('path');
                40          :
                41          :     // Events I care about
                42        1 :     hub.addListener('configure', configure);
                43          :
                44        1 :     function configure() {
                45          :
                46        9 :         var config = {
                47          :                 uid:            process.getuid(),
                48          :                 gid:            process.getgid(),
                49          :                 port:           8080,
                50          :                 docRoot:        '/var/www',
                51          :                 testDir:        'test/',
                52          :                 outputDir:      'output/',
                53          :                 java:           '',
                54          :                 logFile:        '/tmp/jute.log',
                55          :                 logFormat:      '',
                56          :                 testRegex:      '*.htm*'
                57          :             },
                58          :             exec = require('child_process').exec,
                59          :             fs   = require('fs');
                60          :
                61          :         // Suck in NPM config variables
                62        9 :         for (var key in config) {
                63       90 :             var val = process.env['npm_package_config_' + key];
                64       90 :             if (val) {
                65       65 :                 config[key] = val;
                66          :             }
                67          :         }
                68          :
                69        9 :         try {
                70        9 :             var stat = fs.statSync(config.docRoot);
                71        8 :                 if (!stat.isDirectory()) {
                72        0 :                     throw 'foobie';
                73          :                 }
                74          :         } catch(e) {
                75        1 :             hub.emit(hub.LOG, hub.ERROR, "** " + config.docRoot + " does not exist or is not a directory!! **");
                76        1 :             hub.emit(hub.LOG, hub.ERROR, "Set it properly: npm config set jute:docRoot <directory>");
                77        1 :             hub.emit('configureError', { name: 'docRoot', value: config.docRoot, error: e } );
                78        1 :             return;
                79          :         }
                80          :
                81          :         // Web paths and full paths...
                82        8 :         config.outputDirWeb = config.outputDir;
                83        8 :         config.outputDir    = path.join(config.docRoot, config.outputDir);
                84          :
                85        8 :         config.testDirWeb   = config.testDir;
                86        8 :         config.testDir      = path.join(config.docRoot, config.testDir);
                87          :
                88          :         // Set process uid/gid
                89        8 :         try {
                90        8 :             process.setgid(config.gid);
                91        7 :             process.setuid(config.uid);
                92          :         } catch(e) {
                93        2 :             hub.emit(hub.LOG, hub.ERROR, "** Unable to set uid/gid for JUTE process: " + e + " **");
                94        2 :             hub.emit(hub.LOG, hub.ERROR, "Change these values (or run with 'sudo') using: ");
                95        2 :             hub.emit(hub.LOG, hub.ERROR, "% npm config set jute:user <user>");
                96        2 :             hub.emit(hub.LOG, hub.ERROR, "% npm config set jute:grouop <grouop>");
                97        2 :             hub.emit('configureError', { name: 'uid/gid', value: [ config.gid, config.uid ], error: e } );
                98        2 :             return;
                99          :         }
               100          :
               101          :         // Find Java executable
               102        6 :         if (process.env.JAVA_HOME) {
               103        1 :             config.java = path.join(process.env.JAVA_HOME, 'bin', 'java');
               104        5 :         } else if (!config.java) {
               105        0 :             exec('which java', function (error, stdout, stderr) {
               106        0 :                 if (!error) {
               107        0 :                     config.java = stdout.trim();
               108          :                 }
               109          :             });
               110          :         }
               111          :
               112        6 :         try {
               113        6 :             var stat = fs.statSync(config.java);
               114        4 :             if (!stat.isFile()) {
               115        0 :                 throw 'foobie';
               116          :             }
               117          :         } catch(e) {
               118        2 :             hub.emit(hub.LOG, hub.ERROR, '** Cannot find "java" executable **');
               119        2 :             hub.emit(hub.LOG, hub.ERROR, 'Set $JAVA_HOME OR set the "java" configuration variable (% npm config set jute:java <path>)');
               120        2 :             hub.emit(hub.LOG, hub.ERROR, 'Or add the "java" executable to your PATH');
               121        2 :             hub.emit('configureError', { name: 'java', value: config.java, error: e } );
               122        2 :             return;
               123          :         }
               124          :
               125          :         // Make sure output directory is writable for grins...
               126        4 :         var testDir = path.join(config.outputDir, 'foo');
               127        4 :         fs.mkdir(testDir, 0777, function(err) {
               128        4 :             if (err) {
               129        2 :                 hub.emit(hub.LOG, hub.ERROR, "** Output directory '" + config.outputDir + "' not writable or does not exist!! **");
               130        2 :                 hub.emit(hub.LOG, hub.ERROR, "Note outputDir is RELATIVE to docRoot!!");
               131        2 :                 hub.emit(hub.LOG, hub.ERROR, "Change output dir using: % npm conifg set jute:outputDir <dir>");
               132        2 :                 hub.emit(hub.LOG, hub.ERROR, "Or make " + config.outputDir + ' writable by user ' + config.user);
               133        2 :                 hub.emit(hub.LOG, hub.ERROR, "Or change the user JUTE runs as: % npm config set jute:user <user>");
               134        2 :                 hub.emit('configureError', { name: 'outputDir', value: config.outputDir, error: err } );
               135        2 :                 return;
               136          :             }
               137        2 :             fs.rmdirSync(testDir);
               138          :
               139          :             // All is cool - stash config & move on
               140        2 :             hub.config = config;
               141        2 :             hub.emit('configureDone', config);
               142          :         });
               143          :     }
               144          : }
               145          : };
               146          :

Generated by: YUI Test