Fix logging behaviour; new tests
This commit is contained in:
parent
f9992c2f64
commit
4ae5e82d6f
3 changed files with 145 additions and 7 deletions
|
@ -350,11 +350,8 @@ function router(App $utopia, Database $dbForConsole, callable $getProjectDB, Swo
|
||||||
->trigger()
|
->trigger()
|
||||||
;
|
;
|
||||||
|
|
||||||
if ($function->getAttribute('logging')) {
|
|
||||||
/** @var Document $execution */
|
|
||||||
$execution = Authorization::skip(fn () => $dbForProject->createDocument('executions', $execution));
|
$execution = Authorization::skip(fn () => $dbForProject->createDocument('executions', $execution));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$execution->setAttribute('logs', '');
|
$execution->setAttribute('logs', '');
|
||||||
$execution->setAttribute('errors', '');
|
$execution->setAttribute('errors', '');
|
||||||
|
|
|
@ -260,9 +260,7 @@ class Functions extends Action
|
||||||
'search' => implode(' ', [$function->getId(), $executionId]),
|
'search' => implode(' ', [$function->getId(), $executionId]),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($function->getAttribute('logging')) {
|
|
||||||
$execution = $dbForProject->createDocument('executions', $execution);
|
$execution = $dbForProject->createDocument('executions', $execution);
|
||||||
}
|
|
||||||
|
|
||||||
if ($execution->isEmpty()) {
|
if ($execution->isEmpty()) {
|
||||||
throw new Exception('Failed to create execution');
|
throw new Exception('Failed to create execution');
|
||||||
|
|
|
@ -2666,4 +2666,147 @@ class FunctionsCustomServerTest extends Scope
|
||||||
|
|
||||||
$this->assertEquals(204, $response['headers']['status-code']);
|
$this->assertEquals(204, $response['headers']['status-code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFunctionLogging()
|
||||||
|
{
|
||||||
|
// Preparations: Create Function
|
||||||
|
$folder = 'node';
|
||||||
|
$code = realpath(__DIR__ . '/../../../resources/functions') . "/$folder/code.tar.gz";
|
||||||
|
$this->packageCode($folder);
|
||||||
|
|
||||||
|
$function = $this->client->call(Client::METHOD_POST, '/functions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'functionId' => ID::unique(),
|
||||||
|
'runtime' => 'node-18.0',
|
||||||
|
'name' => 'Logging Test',
|
||||||
|
'entrypoint' => 'index.js',
|
||||||
|
'logging' => false,
|
||||||
|
'execute' => ['any']
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(201, $function['headers']['status-code']);
|
||||||
|
$this->assertFalse($function['body']['logging']);
|
||||||
|
$this->assertNotEmpty($function['body']['$id']);
|
||||||
|
|
||||||
|
$functionId = $function['body']['$id'];
|
||||||
|
|
||||||
|
$deployment = $this->client->call(Client::METHOD_POST, '/functions/' . $functionId . '/deployments', array_merge([
|
||||||
|
'content-type' => 'multipart/form-data',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'code' => new CURLFile($code, 'application/x-gzip', basename($code)),
|
||||||
|
'activate' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(202, $deployment['headers']['status-code']);
|
||||||
|
$this->assertNotEmpty($deployment['body']['$id']);
|
||||||
|
|
||||||
|
$deploymentId = $deployment['body']['$id'] ?? '';
|
||||||
|
|
||||||
|
$this->awaitDeploymentIsBuilt($functionId, $deploymentId, checkForSuccess: false);
|
||||||
|
|
||||||
|
// Sync Executions test
|
||||||
|
$execution = $this->client->call(Client::METHOD_POST, '/functions/' . $functionId . '/executions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), []);
|
||||||
|
|
||||||
|
$this->assertEquals(201, $execution['headers']['status-code']);
|
||||||
|
$this->assertEmpty($execution['body']['logs']);
|
||||||
|
$this->assertEmpty($execution['body']['errors']);
|
||||||
|
|
||||||
|
// Async Executions test
|
||||||
|
$execution = $this->client->call(Client::METHOD_POST, '/functions/' . $functionId . '/executions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'async' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(202, $execution['headers']['status-code']);
|
||||||
|
$this->assertEmpty($execution['body']['logs']);
|
||||||
|
$this->assertEmpty($execution['body']['errors']);
|
||||||
|
$this->assertNotEmpty($execution['body']['$id']);
|
||||||
|
|
||||||
|
$executionId = $execution['body']['$id'];
|
||||||
|
|
||||||
|
sleep(5);
|
||||||
|
|
||||||
|
$execution = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/executions/' . $executionId, array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()));
|
||||||
|
|
||||||
|
$this->assertEquals(200, $execution['headers']['status-code']);
|
||||||
|
$this->assertEquals('completed', $execution['body']['status']);
|
||||||
|
$this->assertEmpty($execution['body']['logs']);
|
||||||
|
$this->assertEmpty($execution['body']['errors']);
|
||||||
|
|
||||||
|
// Domain Executions test
|
||||||
|
$rules = $this->client->call(Client::METHOD_GET, '/proxy/rules', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'queries' => [
|
||||||
|
Query::equal('resourceId', [$functionId])->toString(),
|
||||||
|
Query::equal('resourceType', ['function'])->toString(),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(200, $rules['headers']['status-code']);
|
||||||
|
$this->assertNotEmpty($rules['body']['rules'][0]['domain']);
|
||||||
|
|
||||||
|
$domain = $rules['body']['rules'][0]['domain'];
|
||||||
|
|
||||||
|
$proxyClient = new Client();
|
||||||
|
$proxyClient->setEndpoint('http://' . $domain);
|
||||||
|
|
||||||
|
$response = $proxyClient->call(Client::METHOD_GET, '/', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id']
|
||||||
|
]));
|
||||||
|
|
||||||
|
$this->assertEquals(200, $response['headers']['status-code']);
|
||||||
|
|
||||||
|
$executions = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/executions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'queries' => [
|
||||||
|
Query::limit(1)->toString(),
|
||||||
|
Query::orderDesc('$id')->toString(),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(200, $executions['headers']['status-code']);
|
||||||
|
$this->assertCount(1, $executions['body']['executions']);
|
||||||
|
$this->assertEmpty($executions['body']['executions'][0]['logs']);
|
||||||
|
$this->assertEmpty($executions['body']['executions'][0]['errors']);
|
||||||
|
|
||||||
|
// Ensure executions count
|
||||||
|
$executions = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/executions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()));
|
||||||
|
|
||||||
|
$this->assertEquals(200, $executions['headers']['status-code']);
|
||||||
|
$this->assertCount(3, $executions['body']['executions']);
|
||||||
|
|
||||||
|
// Double check logs and errors are empty
|
||||||
|
foreach ($executions['body']['executions'] as $execution) {
|
||||||
|
$this->assertEmpty($execution['logs']);
|
||||||
|
$this->assertEmpty($execution['errors']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup : Delete function
|
||||||
|
$response = $this->client->call(Client::METHOD_DELETE, '/functions/' . $functionId, [
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
'x-appwrite-key' => $this->getProject()['apiKey'],
|
||||||
|
], []);
|
||||||
|
|
||||||
|
$this->assertEquals(204, $response['headers']['status-code']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue