forked from elisavg5/BuildYourBlockChain
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest.js
More file actions
134 lines (113 loc) · 4.62 KB
/
test.js
File metadata and controls
134 lines (113 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import tape from 'tape'
import _test from 'tape-promise'
import net from 'net'
import fs from 'fs'
import { exec, spawn } from 'child_process'
const test = _test.default(tape) // decorate tape
function execCommande (cmd, t) {
return new Promise((resolve, reject) => {
exec(cmd, (error, stdout, stderr) => {
if (error) {
t.error(error)
if (error.code === 126) {
t.comment('Avez-vous fait un `chmod +x serveur.js` ?')
}
t.end()
return reject(error)
}
return resolve({ stdout, stderr })
})
})
}
test('Vérification de la version de node', function (t) {
return execCommande('node --version', t).then(({ stdout, stderr }) => {
t.ok(parseInt(stdout.split('.')[0].split('v')[1]) >= 16, 'Version de node supérieure ou équale à 16')
})
})
test('Vérification de la version', function (t) {
return execCommande('node ./serveur.js --version', t).then(({ stdout, stderr }) => {
t.equal(stdout, '1.0.0\n', 'Numero de version')
})
})
function isPortTaken (port) {
return new Promise((resolve, reject) => {
const tester = net.createServer()
.once('error', err => (err.code === 'EADDRINUSE' ? resolve(false) : reject(err)))
.once('listening', () => tester.once('close', () => resolve(true)).close())
.listen(port)
})
}
let serveur
test('Démarrage du serveur sur le port 3000', function (t) {
return isPortTaken(3000).then((ok) => {
t.ok(ok, 'Port disponible')
if (!ok) {
t.comment("Avez-vous bien arrêté tous les serveurs en cours d'exécution ?")
}
}).then(() => {
const out = fs.openSync('./serveur.log', 'a')
const err = fs.openSync('./serveur.err', 'a')
serveur = spawn('node', ['./serveur.js', '--port=3000'], {
stdio: ['ignore', out, err]
})
})
})
test('Affectation de la valeur "Reimert" à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true set name Reimert', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'OK\n', 'Set réussi')
})
})
test('Récupération de la valeur associé à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true get name', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'Reimert\n', 'Valeur correct')
})
})
test('Récupération de la valeur associé à la clef "jeNeSuisPasDef"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true get jeNeSuisPasDef', t).then(({ stdout, stderr }) => {
t.equal(stderr, 'ERROR: Field jeNeSuisPasDef not exists\n', 'Retour une erreur')
})
})
test('Affectation de la valeur "Frenot" à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true set name Frenot', t).then(({ stdout, stderr }) => {
t.equal(stderr, 'ERROR: set error : Field name exists.\n', 'Set doit échouer car la valeur change')
})
})
test('Récupération de la valeur associé à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true get name', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'Reimert\n', 'Valeur correct')
})
})
test('Réaffectation de la valeur "Reimert" à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true set name Reimert', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'OK\n', 'Set doit réussir car la valeur ne change pas. Cf. protocole.')
})
})
test('Récupération de la valeur associé à la clef "name"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true get name', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'Reimert\n', 'Valeur correct')
})
})
test('Récupération de la list des clefs', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true keys', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'name\n', 'Valeur correct')
})
})
test('Affectation de la valeur "Frenot" à la clef "directeur"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true set directeur Frenot', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'OK\n', 'Set doit réussir')
})
})
test('Récupération de la valeur associé à la clef "directeur"', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true get directeur', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'Frenot\n', 'Valeur correct')
})
})
test('Récupération de la list des clefs', function (t) {
return execCommande('node ./cli.js --port=3000 --bot=true keys', t).then(({ stdout, stderr }) => {
t.equal(stdout, 'name,directeur\n', 'Valeur correct')
})
})
test('Kill serveur', function (t) {
t.ok(serveur.kill(), 'Arret du serveur')
t.end()
})