Commit 0adf6b75 authored by Indrek Jentson's avatar Indrek Jentson

Parandus töö veatöötluses, lisatud testid

parent 0f029cbf
#!/bin/sh
RADA=test/integration/resources
cat $1 | $RADA/rlausestaja.pl
var config = require('./global_config/global');
/*
* Teenuse ja serveri url ilma pordita. Kasutatakse teenuse serverisse installeerimisel teenuse urli moodustamiseks: <url>:<port>/api/v1/
* Teenuse komponendi ja serveri urlid ilma pordita.
* Kasutatakse teenuse serverisse installeerimisel teenuse urli moodustamiseks: <config.serviceUrl>:<config.wrapper.port>/api/v1/
*/
config.serviceUrl = 'http://localhost'; // Docker-compose kontekstis 'http://teenusenimi'
config.serverUrl = 'http://localhost'; // Docker-compose kontekstis 'http://server'
/*
* Redis serveri andmed. Kui kasutatakse vaikeseadeid, siis pole vaja muuta
*/
//config.redis = {
// host: process.env.REDIS_PORT_6379_TCP_ADDR || "127.0.0.1", // Docker-compose kontekstis 'redis'
// port: process.env.REDIS_PORT_6379_TCP_PORT || 6379
//};
/*
* Nimekiri keeleliini serverirakendustest, kuhu teenuse käivitamisel see installeeritakse.
*/
//config.integration = [
// {
// installUrl: 'http://keeleliin.keeleressursid.ee:3000/api/v1/service/install', // Docker-compose kontekstis 'http://server:3000/...'
// apiKey: 'server-wrapper-api-key'
// }
//];
config.serviceUrl = 'http://localhost';
config.serverUrl = 'http://localhost';
/*
* Teenuse failide salvestamise asukohad
*/
//config.fs = {
// storagePath: '/wrapper/files',
// tmpPath: '/wrapper/tmp'
//};
/*
* Kui teenuse töös peaks tekkima vigu ja selle kohta soovitakse veadeadet emailile saada,
* siis tuleks see sisse kommenteerida ja *** väjad täita
*/
/* config.log4js.appenders.push({
"type": "logLevelFilter",
"level": "ERROR",
"appender": {
"type": "smtp",
"layout": {
type: 'pattern',
pattern: "[%d] [%x{port}-%x{pid}][%5.5p] %c - %m",
tokens: {
pid: process.pid,
port: config.port
}
},
"recipients": "***@***.***", //komaga eraldatult eposti aadressid
"sendInterval": 10, //sec
"transport": "SMTP",
"SMTP": {
"host": "smtp.gmail.com",
"secureConnection": false,
"port": 587,
"auth": {
"user": "***",
"pass": "***"
},
"debug": true
}
}
}
);
*/
config.fs = {
storagePath: 'tmp_tests/files',
tmpPath: 'tmp_tests/tmp'
};
config.wrapper = { //teenuse seadistus
id: 'concat', // Unikaalne lühinimi
title: 'Lihtne konkateneerija', //Avalik nimi
description: 'Liidab etteantud failid üheks suureks failiks', //Kirjeldus
port: 3002, // port
class: 'simpleLocalCommand', // wrapperi failinimi wrapper kaustast, mida utiliidi käivitamiseks kasutatakse
command: { commandTemplate: 'cat [data]' }, // utiliidi käsurea käsk
requestConf: { // Päringu seadistus
requestBodyParamsMappings: { // Päringu post parameetrid
id: 'kl_lausestaja', // Unikaalne lühinimi
title: 'Lausestamise utiliit', //Avalik nimi
description: 'Koostab etteantud tekstile vastava lauseteks jagatud teksti', //Kirjeldus
port: 3010, //port
class: 'simpleLocalCommand', //wrapperi failinimi wrapper kaustast, mida utiliidi käivitamiseks kasutatakse
command: { commandTemplate: './command.sh [data]' }, // utiliidi käsurea käsk
requestConf: { //Päringu seadistus
requestBodyParamsMappings: { //Päringu post parameetrid
isAsync: { //parameeter isAsync
type: config.paramTypes.SELECT, //Tüüp. Võimalikud väärtused: config.paramTypes.SELECT ja config.paramTypes.TEXT
options: ['0', '1'], // Võimalikud sobivad väärtused
value: '1', // Soovituslik vaikeväärtus
filter: function (value) { // parameerile rakendatav filter. Antud juhul viiaks väärtus boolean kujule
return value === 1;
options: ['0', '1'], //Võimalikud sobivad väärtused
value: '1', //Soovituslik vaikeväärtus
filter: function (value) { //parameerile rakendatav filter. Antud juhul viiaks väärtus boolean kujule
return value == 1;
},
required: true, // kas mittetühi väärtus on nõutud
allowEmpty: false, // kas parameeter peab olema saadetud
validator: function (value, request) { // filtreeritud väärtuse valideerimine
required: true, //kas mittetühi väärtus on nõutud
allowEmpty: false, //kas parameeter peab olema saadetud
validator: function (value, request) { //filtreeritud väärtuse valideerimine
if( typeof value != 'boolean' ){
request.setMessage('isAsync', 'Peab olema boolean');
return false;
......@@ -94,19 +42,19 @@ config.wrapper = { //teenuse seadistus
}
}
},
requestFiles: { // Päringuga saadetavad failid
content: { // Faili võti
type: 'text', // Ressursi tüübi võti
sizeLimit: 0, // Suuruse piirang
sizeUnit: 'byte',// Suuruse piirangu ühik
isList: true // Kas tegemist võib olla ka failide listuga
requestFiles: { //Päringuga saadetavad failid
content: { //Faili võti
type: 'text', //Ressursi tüübi võti
sizeLimit: 0, //Suuruse piirang
sizeUnit: 'byte',//Suuruse piirangu ühik
isList: false //Kas tegemist võib olla ka failide listuga
}
}
},
outputTypes: [ //teenuse väljundressursside kirjldused
outputTypes: [ //teenuse väljundressursside kirjeldused
{
type: 'text', // ressursi tüüp
key: 'output' // väljundressursi võti
type: 'lau_a', //ressursi tüüp
key: 'output' //väljundressursi võti
}
],
sessionMaxLifetime: 600 // sessiooni maksimaalne kestvus
......
......@@ -22,7 +22,7 @@ Session.prototype.addOutputFile = function(key, file){
Session.prototype.setErrors = function(errors){
this.errors = errors;
this.isSuccess = false;
this.success = false;
this.message = Session.messages.ERROR
};
......
......@@ -65,8 +65,8 @@ function LocalExecutor() {
process.stderr.on('data', function (data) {
logger.error('Got std error: ' + data);
//response.isSuccess = false;
//response.errors.push({util:data.toString()});
response.isSuccess = false;
response.errors.push({util:data.toString()});
});
process.on('error', function (data) {
......
/**
* sudo npm install -g mocha
* # start redis-server
* # create config.js and set desired values to paths
* # create config[_dist].js and set desired values to paths
* # run tests:
* npm test
*/
var server = require('../../www/server');
var config = require('../../config');
var fs = require('fs');
var should = require('should');
var assert = require('assert');
var request = require('request');
var fs = require('fs');
var config = require('../../config');
var server = require('../../www/server');
describe('Services', function() {
this.timeout(3000);
var url = 'http://127.0.0.1:' + config.wrapper.port;
buildData = function(body, fileName) {
......@@ -34,7 +38,7 @@ describe('Services', function() {
return form;
};
describe('With files', function() {
context('With files', function() {
it('Vastab sünkroonselt teenuse päringule', function(done){
var body = {
......
#!/usr/bin/perl -w
# arvestatakse, et reavahetus on lõigupiir ja ka lausepiir
use utf8;
use open qw(:std :utf8);
use locale;
my $rida = "";
while (<>){
chomp;
s:\”:":g;
s:\“:":g;
s:«:":g;
s:»:":g;
$rida = $_;
$rida=convert_umlauts($rida);
$rida =~ s:([^>]+)$:$1 </s> :g; #v\n
$rida =~ s:^([^<]):<s>$1:g; #\nv
$rida =~ s:([a-zõäöü]\.) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v. S
$rida =~ s:(\)\.) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #). S
$rida =~ s:(\273\.) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #". S
$rida =~ s:(\.\273) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #.". S
$rida =~ s:([a-zõäöü]\.)[ ]*(\253[A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v. "S
$rida =~ s:([a-zõäöü]\.) ("\“[A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v. "S
$rida =~ s:([a-zõäöü]\.) (\253\253[A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v. ""S
if ($rida =~ m:[a-zõäöü]\.\s+[0-9]:){ #v. N
if ($rida !~ m:nr\.:){
$rida =~ s:([a-zõäöü]\.) ([0-9]):$1</s> <s>$2:g;
}
}
$rida =~ s:([0-9]%\.) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #N%. S
$rida =~ s:([0-9]\.) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #N. S
$rida =~ s:([a-zõäöü][!\?]\273) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v!" S
# hüüu- ega küsimärk ei ole tsitaadis
if ($rida !~ m:\253:){
$rida =~ s:([a-zõäöü][!\?]) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v! S
$rida =~ s:([a-zõäöü][!\?]) ([0-9]):$1</s> <s>$2:g; #v! N
$rida =~ s:([a-zõäöü]\?!) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g; #v?! S
}
else {
$rida =~ s:(\: \253[^\273]*[\.!\?]\273) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g;
while($rida =~ s:(<s>[^\253]*?[a-zõäöü][!\?]) ([A-ZÕÄÖÜ]):$1</s> <s>$2:g){}
}
$rida =~ s:(<s>\253[^\<\273]*?)(</s> <s>):$1\273$2\253:g; #<">< => <""><"
#$rida = convert_back($rida);
# normaliseeri morfanalüsaatori jaoks jutumärgid
$rida =~ s:([^ ])\" :$1 ":g;
$rida =~ s:\"([^ ]):" $1:g;
$rida =~ s:([^ ])»:$1 ”:g;
$rida =~ s:«([^ ]):“ $1:g;
$rida =~ s:([^ ])”:$1 ”:g;
$rida =~ s:\“([^ ]):“ $1:g;
$rida =~ s:([^ ])\):$1 ):g;
$rida =~ s:\(([^ ]):( $1:g;
$rida =~ s:>([^ ]):> $1:g;
$rida =~ s:([^ ])<:$1 <:g;
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”][\.?!][\.!?]) :$1 $2 :g; # 3.. . teeb
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”][\.!?]) :$1 $2 :g;
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”]) :$1 $2 :g;
#numbrid
# $rida =~ s:([^\d])\. :$1 . :g;
$rida =~ s:(\d+) (\d+) (\d+):$1$2$3:g;
$rida =~ s:(\d+) (\d+):$1$2:g;
# $rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”])$:$1 $2 :g;
# $rida =~ s:(.*)$:$1 !!! :g;
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”][\.!?][\.!?].) </s> $:$1 $2 </s> :g; #v\n
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”][\.!?].) </s> $:$1 $2 </s> :g; #v\n
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”].) </s> $:$1 $2 </s> :g; #v\n
$rida =~ s:([^ ])([\.,!?;\-\:\"\)\(«»“”]) </s> $:$1 $2 </s> :g; #v\n
$rida =~ s:(\d+)\s+[.](\s+[^<]*):$1.$2:g; #järgarvud
$rida =~ s:(\d+)[.]\s+a\s+[.]:$1. a.:g;
#kohtuotsuste eri
$rida =~ s: p\s*. </s>\s+<s>\s+(\d): p. $1:g;
$rida =~ s:[)](\S+):) $1:g;
$rida =~ s: s : 's' :g;
$rida =~ s: : :g;
$rida =~ s:\s+: :g;
$rida =~ s:</s>\s+$:</s> :g;
if ($rida =~ m/^\s*$/) {next;}
$rida =~ s: :\n:g;
print $rida;
}
sub convert_umlauts{
my $l=$_[0];
$l =~ s/&auml;/ä/g;
$l =~ s/&ouml;/ö/g;
$l =~ s/&uuml;/ü/g;
$l =~ s/&otilde;/õ/g;
$l =~ s/&Auml;/Ä/g;
$l =~ s/&Ouml;/Ö/g;
$l =~ s/&Uuml;/Ü/g;
$l =~ s/&Otilde;/Õ/g;
$l =~ s/&raquo;/\273/g;
$l =~ s/&laquo;/\253/g;
$l =~ s/&rdquo;/\273/g;
$l =~ s/&ldquo;/\253/g;
return $l;
}
sub convert_back{
my $l=$_[0];
$l =~ s/ä/&auml;/g;
$l =~ s/ö/&ouml;/g;
$l =~ s/ü/&uuml;/g;
$l =~ s/õ/&otilde;/g;
$l =~ s/Ä/&Auml;/g;
$l =~ s/Ö/&Ouml;/g;
$l =~ s/Ü/&Uuml;/g;
$l =~ s/Õ/&Otilde;/g;
$l =~ s/\273/&raquo;/g;
$l =~ s/\253/&laquo;/g;
return $l;
}
......@@ -6,12 +6,12 @@
* npm test
*/
var server = require('../../www/server');
var config = require('../../config');
var should = require('should');
var assert = require('assert');
var request = require('supertest');
var tester = require('supertest');
var request = require('request');
var fs = require('fs');
var config = require('../../config');
describe('Routing', function() {
var url = 'http://127.0.0.1:' + config.wrapper.port;
......@@ -26,7 +26,7 @@ describe('Routing', function() {
it('Tagastab api kirjelduse lehe', function(done) {
request(url)
tester(url)
.get('/')
.expect(200)
.expect('Content-Type', /html/)
......@@ -40,7 +40,7 @@ describe('Routing', function() {
it('Mitteeksisteeriv url tagastab json veateate', function(done) {
request(url)
tester(url)
.get('/midagisuvalist')
.expect(404)
.expect('Content-Type', /json/)
......@@ -58,7 +58,7 @@ describe('Routing', function() {
var sessionId = 'suvaId';
request(url)
tester(url)
.get('/api/v1/service/' + sessionId)
.expect(404)
.expect('Content-Type', /json/)
......@@ -83,7 +83,7 @@ describe('Routing', function() {
}
}
};
request(url)
tester(url)
.post('/api/v1/service')
.send(body)
.expect('Content-Type', /json/)
......@@ -100,5 +100,61 @@ describe('Routing', function() {
});
});
it('Teostab etteantud töö', function(done){
var body = {
service: {
meta: {
isAsync: false
},
pipecontent: {
content: "data"
}
}
};
var tmpPath = config.fs.tmpPath;
var source = tmpPath + '/test.txt';
fs.writeFileSync(source, 'Faili sisu. See on testimiseks.');
var formData = buildData(body, source);
request
.post({"url":url+'/api/v1/service', formData:formData}, function(err,res,body) {
if (err) {
throw err;
}
console.log('sync res: '+JSON.stringify(res));
var body = JSON.parse(res.body);
body.response.should.have.property('success');
body.response.success.should.equal(true);
done();
});
});
it('Tagastab töö teostamisel tekkinud vea', function(done){
var body = {
service: {
meta: {
isAsync: false
},
pipecontent: {
content: "data"
}
}
};
var tmpPath = config.fs.tmpPath;
var source = tmpPath + '/test.txt';
fs.writeFileSync(source, 'Faili sisu. See on testimaks täpitähti.', {encoding: 'latin1'});
var formData = buildData(body, source);
request
.post({"url":url+'/api/v1/service', formData:formData}, function(err,res,body) {
if (err) {
throw err;
}
console.log('sync res: '+JSON.stringify(res));
var body = JSON.parse(res.body);
body.response.should.have.property('success');
body.response.success.should.equal(false);
done();
});
});
});
});
\ No newline at end of file
......@@ -13,15 +13,32 @@ gracefulFs.gracefulify(realFs); //monkey-patch for EMFILE
var log4js = require('log4js');
var path = require('path');
var logger = require('morgan');
var config;
try {
console.log('CONFIG load started ...');
config = require(global.__base + 'config');
} catch (e) {
try {
var cnf = require.resolve(global.__base + 'config_dist');
console.log('CONFIG copy ordered ...');
realFs.copyFileSync(global.__base + 'config_dist.js', global.__base + 'config.js');
console.log('CONFIG copy done.');
config = require(global.__base + 'config');
} catch (ee) {
console.error('Can not read configuration: ' + ee.toString());
console.info('If config_dist.js exists, then try again');
process.exit(ee.code);
}
} finally {
console.log('CONFIG load finished');
}
var bodyParser = require('body-parser');
var multer = require('multer');
var cluster = require('cluster');
var http = require('http');
try {
var config = require('./../config');
} catch (e) {
console.error('Can not read configuration: ' + e.toString());
}
var controllers = require('./../controllers/index');
var routerMiddleware = require('./../middlewares/router');
var errorhandlerMiddleware = require('./../middlewares/errorhandler');
......@@ -52,12 +69,14 @@ app.use(routerMiddleware.routeLogger);
app.use(controllers);
app.use(errorhandlerMiddleware.error404);
app.use(errorhandlerMiddleware.common);
global.servers = [];
/**
* Create HTTP server.
*/
function startCluster( instanceCount, cb ){
if(instanceCount == null){
if (instanceCount == null){
instanceCount = require('os').cpus().length;
}
......@@ -90,6 +109,7 @@ function startInstance(cb) {
var port = ServerUtil.normalizePort(config.wrapper.port);
app.set('port', port);
var server = http.createServer(app);
global.servers.push(server);
server.listen(port);
server.on('error', ServerUtil.onError);
server.on('listening', function () {
......@@ -100,8 +120,15 @@ function startInstance(cb) {
});
}
function stopInstances(cb) {
global.servers.forEach(function(server) {
server.close();
});
cb();
}
// *******************************************************
exports.startCluster = startCluster;
exports.startInstance = startInstance;
exports.stopInstances = stopInstances;
exports.app = app;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment