blob: a93ff6a2bc522c109537efe1932068787e8dfc46 [file] [log] [blame]
import test from 'ava'
import fs from 'fs'
import { Node } from '../lib/node'
import { Secret } from '../lib/secret'
import { Service } from '../lib/service'
import Swarm from '../lib/swarm'
import { Task } from '../lib/task'
import { Docker } from '../lib/docker'
const socket = process.env.DOCKER_SOCKET || '/var/run/docker.sock'
const isSocket = fs.existsSync(socket) ? fs.statSync(socket).isSocket() : false
const docker = isSocket
? new Docker()
: new Docker({ socketPath: socket })
const createService = _ =>
docker.service.create({
"Name": "redis-" + Date.now(),
"TaskTemplate": {
"ContainerSpec": {
"Image": "redis"
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {},
"Placement": {}
},
"Mode": {
"Replicated": {
"Replicas": 1
}
},
"UpdateConfig": {
"Parallelism": 1
},
"EndpointSpec": {
"ExposedPorts": [{
"Protocol": "tcp",
"Port": 6379
}]
}
})
test.before(async t => {
const node = await docker.swarm.init({
"ListenAddr": "127.0.0.1:4500",
"AdvertiseAddr": "127.0.0.1:4500",
"ForceNewCluster": true,
"Spec": {
"AcceptancePolicy": {
"Policies": [{
"Role": "MANAGER",
"Autoaccept": false
}, {
"Role": "WORKER",
"Autoaccept": true
}]
},
"Orchestration": {},
"Raft": {},
"Dispatcher": {},
"CAConfig": {}
}
})
t.is(node.constructor, Node)
})
test.after('cleanup', t => {
docker.swarm.leave({ 'force': true })
})
test('inspect', async t => {
const swarm = await docker.swarm.status()
t.is(swarm.constructor, Swarm)
})
test('create-service', async t => {
const service = await createService()
t.is(service.constructor, Service)
})
test('list-services', async t => {
const service = await createService()
const services = await docker.service.list()
t.is(services.constructor, Array)
t.not(services.length, 0)
})
test('inspect-service', async t => {
const service = await (await createService()).status()
t.is(service.constructor, Service)
})
test('update-service', async t => {
const service = await (await createService()).status()
const data = service.data.Spec
data.version = service.data.Version.Index
const res = await service.update(data)
t.is(res.constructor, Service)
})
test('delete-service', async t => {
const service = await (await createService()).status()
t.notThrows(service.remove())
})
test('logs-service', async t => {
const res = await (await createService()).logs({stdout: true})
t.truthy(res.pipe)
})
test('list-tasks', async t => {
const tasks = await docker.task.list()
t.is(tasks.constructor, Array)
})
test('list-nodes', async t => {
const nodes = await docker.node.list()
t.is(nodes.constructor, Array)
t.is(nodes[0].constructor, Node)
})
test('inspect-node', async t => {
const nodes = await docker.node.list()
const node = await nodes[0].status()
t.is(node.constructor, Node)
})
test('remove-node', async t => {
const nodes = await docker.node.list()
const node = await nodes[0].status()
t.throws(node.remove())
})
test('list-secret', async t => {
const secrets = await docker.secret.list()
t.is(secrets.constructor, Array)
})
test('create-secret', async t => {
const secret = await docker.secret.create({
"Name": "app-key.crt",
"Labels": {
"foo": "bar"
},
"Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
})
t.is(secret.constructor, Secret)
t.notThrows(secret.remove())
})
test('status-secret', async t => {
const secret = await docker.secret.create({
"Name": "app-key1.crt",
"Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
})
const secretStatus = await secret.status()
t.is(secretStatus.constructor, Secret)
t.notThrows(secret.remove())
})