UNPKG

node-docker-api

Version:
166 lines (144 loc) 3.92 kB
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()) })