Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ In my current working directory, I have an `index.js` file like this.

```js
const framework = require('faas-js-runtime');
const options = {
// Pino is used as the logger implementation. Supported log levels are
// documented at this link:
// https://github.com/pinojs/pino/blob/master/docs/api.md#options
logLevel: 'info'
}

// My function directory is in ./function-dir
framework(require(`${__dirname}/function-dir/`), server => {
Expand All @@ -36,7 +42,7 @@ framework(require(`${__dirname}/function-dir/`), server => {

// Whenever you want to shutdown the framework
server.close();
});
}, options);
```

In `./function-dir`, there is an `index.js` file that looks
Expand All @@ -47,6 +53,7 @@ module.exports = async function myFunction(context) {
const ret = 'This is a test function for Node.js FaaS. Success.';
return new Promise((resolve, reject) => {
setTimeout(_ => {
context.log.info('sending response to client')
resolve(ret);
}, 500);
});
Expand Down
4 changes: 2 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ function start(func, port, cb, options) {
port = DEFAULT_PORT;
break;
}
const { log = true } = { ...options };
const { logLevel = 'info' } = { ...options };

const server = fastify({ logger: log });
const server = fastify({ logger: { level: logLevel } });

// All incoming requests get a Context object
server.decorateRequest('fcontext');
Expand Down
10 changes: 5 additions & 5 deletions test/test-context.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ test('Provides HTTP request headers with the context parameter', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Provides HTTP request body with the context parameter', t => {
Expand All @@ -30,7 +30,7 @@ test('Provides HTTP request body with the context parameter', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Provides HTTP request query parameters with the context parameter', t => {
Expand All @@ -48,7 +48,7 @@ test('Provides HTTP request query parameters with the context parameter', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Provides HTTP method information with the context parameter', t => {
Expand All @@ -61,7 +61,7 @@ test('Provides HTTP method information with the context parameter', t => {
t.equal(context.method, 'GET');
t.end();
server.close();
}), { log: false });
}), { logLevel: 'silent' });
});

test('Provides HTTP version information with the context parameter', t => {
Expand All @@ -76,6 +76,6 @@ test('Provides HTTP version information with the context parameter', t => {
t.equal(context.httpVersionMinor, 1);
t.end();
server.close();
}), { log: false });
}), { logLevel: 'silent' });
});

55 changes: 28 additions & 27 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ test('Loads a user function with dependencies', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Can respond via an async function', t => {
Expand All @@ -60,7 +60,7 @@ test('Can respond via an async function', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Accepts HTTP POST requests', t => {
Expand All @@ -77,7 +77,7 @@ test('Accepts HTTP POST requests', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds to 0.3 binary cloud events', t => {
Expand All @@ -98,7 +98,7 @@ test('Responds to 0.3 binary cloud events', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds with 0.3 binary cloud event', t => {
Expand All @@ -123,7 +123,7 @@ test('Responds with 0.3 binary cloud event', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds to 1.0 binary cloud events', t => {
Expand All @@ -144,7 +144,7 @@ test('Responds to 1.0 binary cloud events', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds to 1.0 structured cloud events', t => {
Expand All @@ -170,7 +170,7 @@ test('Responds to 1.0 structured cloud events', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Handles 1.0 CloudEvent responses', t => {
Expand All @@ -196,7 +196,7 @@ test('Handles 1.0 CloudEvent responses', t => {
server.close();
});
},
{ log: false });
{ logLevel: 'silent' });
});

test('Handles 1.0 CloudEvent Message responses', t => {
Expand All @@ -222,7 +222,7 @@ test('Handles 1.0 CloudEvent Message responses', t => {
server.close();
});
},
{ log: false });
{ logLevel: 'silent' });
});

test('Extracts event data as the second parameter to a function', t => {
Expand Down Expand Up @@ -252,7 +252,7 @@ test('Extracts event data as the second parameter to a function', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Successfully handles events with no data', t => {
Expand All @@ -275,7 +275,7 @@ test('Successfully handles events with no data', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds with 406 Not Acceptable to unknown cloud event versions', t => {
Expand All @@ -297,7 +297,7 @@ test('Responds with 406 Not Acceptable to unknown cloud event versions', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Respects response code set by the function', t => {
Expand All @@ -313,7 +313,7 @@ test('Respects response code set by the function', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Responds HTTP 204 if response body has no content', t => {
Expand All @@ -330,7 +330,7 @@ test('Responds HTTP 204 if response body has no content', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Sends CORS headers in HTTP response', t => {
Expand All @@ -350,7 +350,7 @@ test('Sends CORS headers in HTTP response', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Respects headers set by the function', t => {
Expand All @@ -367,7 +367,7 @@ test('Respects headers set by the function', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Respects content type set by the function', t => {
Expand All @@ -384,7 +384,7 @@ test('Respects content type set by the function', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Accepts application/json content via HTTP post', t => {
Expand All @@ -403,7 +403,7 @@ test('Accepts application/json content via HTTP post', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Accepts x-www-form-urlencoded content via HTTP post', t => {
Expand All @@ -422,7 +422,7 @@ test('Accepts x-www-form-urlencoded content via HTTP post', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Exposes readiness URL', t => {
Expand All @@ -438,7 +438,7 @@ test('Exposes readiness URL', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Exposes liveness URL', t => {
Expand All @@ -454,7 +454,7 @@ test('Exposes liveness URL', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Returns HTTP error code if a caught error has one', t => {
Expand All @@ -473,7 +473,7 @@ test('Returns HTTP error code if a caught error has one', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Function accepts destructured parameters', t => {
Expand All @@ -490,13 +490,14 @@ test('Function accepts destructured parameters', t => {
t.end();
server.close();
});
}, { log: false });
}, { logLevel: 'silent' });
});

test('Provides logger in context when logging is enabled', t => {
test('Provides logger with appropriate log level configured', t => {
var loggerProvided = false;
const logLevel = 'error'
framework(context => {
loggerProvided = (context.log && typeof context.log.info === 'function');
loggerProvided = (context.log && typeof context.log.info === 'function' && context.log.level === logLevel);
}, server => {
request(server)
.get('/')
Expand All @@ -506,7 +507,7 @@ test('Provides logger in context when logging is enabled', t => {
t.end();
server.close();
});
}, { log: {level: 'error'}}); // enable but squelch
}, { logLevel }); // enable but squelch
});

test('Provides logger in context when logging is disabled', t => {
Expand All @@ -522,6 +523,6 @@ test('Provides logger in context when logging is disabled', t => {
t.end();
server.close();
});
}, { log: false});
}, { logLevel: 'silent' });
});