tasks/datadriver.js
function(callback) {

                if (tunnel) {

                    if (isSauceTunnelRunning) {
                        return callback(null, true);
                    }

                    grunt.log.debug('start sauce tunnel');

                    /**
                     * start sauce tunnel
                     */
                    tunnel.start(function(hasTunnelStarted) {
                        // output here means if tunnel was created successfully
                        if (hasTunnelStarted === false) {
                            callback(new Error('Sauce-Tunnel couldn\'t created successfully'));
                        }

                        grunt.log.debug('tunnel created successfully');
                        isSauceTunnelRunning = true;
                        callback(null);
                    });

                } else if (!server && !isSeleniumServerRunning && !options.nospawn) {

                    grunt.log.debug('start selenium standalone server');

                    /**
                     * starts selenium standalone server if its not running
                     */

                    server = selenium.start(options.seleniumOptions, function(err, child) {
                        if (err) {
                            return callback(err);
                        }

                        grunt.log.debug('selenium successfully started');
                        seleniumServer = child;
                        isSeleniumServerRunning = true;
                        callback(null, true);
                    });

                } else {
                    grunt.log.debug('standalone server or sauce tunnel is running');
                    callback(null, true);
                }

            }
function(callback) {

                if (tunnel) {

                    if (isSauceTunnelRunning) {
                        return callback(null, true);
                    }

                    grunt.log.debug('start sauce tunnel');

                    /**
                     * start sauce tunnel
                     */
                    tunnel.start(function(hasTunnelStarted) {
                        // output here means if tunnel was created successfully
                        if (hasTunnelStarted === false) {
                            callback(new Error('Sauce-Tunnel couldn\'t created successfully'));
                        }

                        grunt.log.debug('tunnel created successfully');
                        isSauceTunnelRunning = true;
                        callback(null);
                    });

                } else if (!server && !isSeleniumServerRunning && !options.nospawn) {

                    grunt.log.debug('start selenium standalone server');

                    /**
                     * starts selenium standalone server if its not running
                     */

                    server = selenium.start(options.seleniumOptions, function(err, child) {
                        if (err) {
                            return callback(err);
                        }

                        grunt.log.debug('selenium successfully started');
                        seleniumServer = child;
                        isSeleniumServerRunning = true;
                        callback(null, true);
                    });

                } else {
                    grunt.log.debug('standalone server or sauce tunnel is running');
                    callback(null, true);
                }

            }
start selenium server or sauce tunnel (if not already started)