function fn() {
  karate.configure('connectTimeout', 5000);
  karate.configure('readTimeout', 5000);  
  // karate.configure('abortSuiteOnFailure', true);
  var port = karate.properties['demo.server.port'] || '8080';
  var protocol = 'http';
  if (karate.properties['demo.server.https'] === 'true') {
    protocol = 'https';
    karate.configure('ssl', true);
  }  
  var config = { demoBaseUrl: protocol + '://127.0.0.1:' + port };
  if (karate.env !== 'mock') {
    // karate.configure('callSingleCache', { minutes: 1 });
    // 'callSingle' is guaranteed to run only once even across all threads
    var result = karate.callSingle('classpath:demo/headers/common-noheaders.feature', config);
    // and it sets a variable called 'authInfo' used in headers-single.feature
    config.authInfo = { authTime: result.time, authToken: result.token };
  }
  return config;
}