UNPKG

3.93 kBJavaScriptView Raw
1import test from 'ava'
2import fs from 'fs'
3import { Node } from '../lib/node'
4import { Secret } from '../lib/secret'
5import { Service } from '../lib/service'
6import Swarm from '../lib/swarm'
7import { Task } from '../lib/task'
8import { Docker } from '../lib/docker'
9
10const socket = process.env.DOCKER_SOCKET || '/var/run/docker.sock'
11const isSocket = fs.existsSync(socket) ? fs.statSync(socket).isSocket() : false
12const docker = isSocket
13 ? new Docker()
14 : new Docker({ socketPath: socket })
15
16const createService = _ =>
17 docker.service.create({
18 "Name": "redis-" + Date.now(),
19 "TaskTemplate": {
20 "ContainerSpec": {
21 "Image": "redis"
22 },
23 "Resources": {
24 "Limits": {},
25 "Reservations": {}
26 },
27 "RestartPolicy": {},
28 "Placement": {}
29 },
30 "Mode": {
31 "Replicated": {
32 "Replicas": 1
33 }
34 },
35 "UpdateConfig": {
36 "Parallelism": 1
37 },
38 "EndpointSpec": {
39 "ExposedPorts": [{
40 "Protocol": "tcp",
41 "Port": 6379
42 }]
43 }
44 })
45
46test.before(async t => {
47 const node = await docker.swarm.init({
48 "ListenAddr": "127.0.0.1:4500",
49 "AdvertiseAddr": "127.0.0.1:4500",
50 "ForceNewCluster": true,
51 "Spec": {
52 "AcceptancePolicy": {
53 "Policies": [{
54 "Role": "MANAGER",
55 "Autoaccept": false
56 }, {
57 "Role": "WORKER",
58 "Autoaccept": true
59 }]
60 },
61 "Orchestration": {},
62 "Raft": {},
63 "Dispatcher": {},
64 "CAConfig": {}
65 }
66 })
67 t.is(node.constructor, Node)
68})
69
70test.after('cleanup', t => {
71 docker.swarm.leave({ 'force': true })
72})
73
74test('inspect', async t => {
75 const swarm = await docker.swarm.status()
76 t.is(swarm.constructor, Swarm)
77})
78
79test('create-service', async t => {
80 const service = await createService()
81 t.is(service.constructor, Service)
82})
83
84test('list-services', async t => {
85 const service = await createService()
86 const services = await docker.service.list()
87 t.is(services.constructor, Array)
88 t.not(services.length, 0)
89})
90
91test('inspect-service', async t => {
92 const service = await (await createService()).status()
93 t.is(service.constructor, Service)
94})
95
96test('update-service', async t => {
97 const service = await (await createService()).status()
98 const data = service.data.Spec
99 data.version = service.data.Version.Index
100 const res = await service.update(data)
101 t.is(res.constructor, Service)
102})
103
104test('delete-service', async t => {
105 const service = await (await createService()).status()
106 t.notThrows(service.remove())
107})
108
109test('logs-service', async t => {
110 const res = await (await createService()).logs({stdout: true})
111 t.is(res.constructor, String)
112})
113
114
115test('list-tasks', async t => {
116 const tasks = await docker.task.list()
117 t.is(tasks.constructor, Array)
118})
119
120test('list-nodes', async t => {
121 const nodes = await docker.node.list()
122 t.is(nodes.constructor, Array)
123 t.is(nodes[0].constructor, Node)
124})
125
126test('inspect-node', async t => {
127 const nodes = await docker.node.list()
128 const node = await nodes[0].status()
129 t.is(node.constructor, Node)
130})
131
132test('remove-node', async t => {
133 const nodes = await docker.node.list()
134 const node = await nodes[0].status()
135 t.throws(node.remove())
136})
137
138test('list-secret', async t => {
139 const secrets = await docker.secret.list()
140 t.is(secrets.constructor, Array)
141})
142
143test('create-secret', async t => {
144 const secret = await docker.secret.create({
145 "Name": "app-key.crt",
146 "Labels": {
147 "foo": "bar"
148 },
149 "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
150 })
151
152 t.is(secret.constructor, Secret)
153 t.notThrows(secret.remove())
154})
155
156test('status-secret', async t => {
157 const secret = await docker.secret.create({
158 "Name": "app-key1.crt",
159 "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
160 })
161 const secretStatus = await secret.status()
162
163 t.is(secretStatus.constructor, Secret)
164 t.notThrows(secret.remove())
165})