UNPKG

7.49 kBJavaScriptView Raw
1'use strict';
2
3const Path = require('path');
4const { expect } = require('code');
5const Hapi = require('hapi');
6const Lab = require('lab');
7const StandIn = require('stand-in');
8const CloudApiGql = require('../lib/');
9const CloudApi = require('../lib/cloudapi');
10
11
12const lab = exports.lab = Lab.script();
13const { describe, it, afterEach } = lab;
14
15
16describe('firewallRules', () => {
17 afterEach(() => {
18 StandIn.restoreAll();
19 });
20
21 const register = {
22 plugin: CloudApiGql,
23 options: {
24 keyPath: Path.join(__dirname, 'test.key'),
25 keyId: 'test',
26 apiBaseUrl: 'http://localhost'
27 }
28 };
29
30 const firewallRule = {
31 id: '38de17c4-39e8-48c7-a168-0f58083de860',
32 rule: 'FROM vm 3d51f2d5-46f2-4da5-bb04-3238f2f64768 TO subnet 10.99.99.0/24 BLOCK tcp PORT 25',
33 enabled: true,
34 description: 'test'
35 };
36
37 it('can list firewall rules', async () => {
38 const server = new Hapi.Server();
39 StandIn.replaceOnce(CloudApi.prototype, 'fetch', () => {
40 return [firewallRule];
41 });
42
43 await server.register(register);
44 await server.initialize();
45 const res = await server.inject({
46 url: '/graphql',
47 method: 'post',
48 payload: { query: 'query { firewall_rules { id rule_str enabled } }' }
49 });
50 expect(res.statusCode).to.equal(200);
51 expect(res.result.data.firewall_rules[0].id).to.equal(firewallRule.id);
52 expect(res.result.data.firewall_rules[0].rule_str).to.equal(firewallRule.rule);
53 expect(res.result.data.firewall_rules[0].enabled).to.equal(firewallRule.enabled);
54 });
55
56 it('can get a firewall rule', async () => {
57 const machine = {
58 id: 'b6979942-7d5d-4fe6-a2ec-b812e950625a',
59 name: 'test',
60 type: 'smartmachine',
61 brand: 'joyent',
62 state: 'running',
63 image: '2b683a82-a066-11e3-97ab-2faa44701c5a',
64 ips: [
65 '10.88.88.26',
66 '192.168.128.5'
67 ],
68 memory: 128,
69 disk: 12288,
70 metadata: {
71 root_authorized_keys: '...'
72 },
73 tags: {},
74 created: '2016-01-04T12:55:50.539Z',
75 updated: '2016-01-21T08:56:59.000Z',
76 networks: [
77 'a9c130da-e3ba-40e9-8b18-112aba2d3ba7',
78 '45607081-4cd2-45c8-baf7-79da760fffaa'
79 ],
80 primaryIp: '10.88.88.26',
81 firewall_enabled: false,
82 compute_node: '564d0b8e-6099-7648-351e-877faf6c56f6',
83 package: 'sdc_128'
84 };
85
86 const server = new Hapi.Server();
87 StandIn.replace(CloudApi.prototype, 'fetch', (stand) => {
88 if (stand.invocations === 1) {
89 return firewallRule;
90 }
91 return [machine];
92 }, { stopAfter: 2 });
93
94 await server.register(register);
95 await server.initialize();
96 const res = await server.inject({
97 url: '/graphql',
98 method: 'post',
99 payload: { query: `query { firewall_rules(id: "${firewallRule.id}") { id rule_str enabled rule_obj machines { name } } }` }
100 });
101 expect(res.statusCode).to.equal(200);
102 expect(res.result.data.firewall_rules[0].id).to.equal(firewallRule.id);
103 expect(res.result.data.firewall_rules[0].rule_str).to.equal(firewallRule.rule);
104 expect(res.result.data.firewall_rules[0].enabled).to.equal(firewallRule.enabled);
105 expect(res.result.data.firewall_rules[0].rule_str).to.equal(firewallRule.rule);
106 expect(res.result.data.firewall_rules[0].machines[0].name).to.equal(machine.name);
107 });
108
109 it('can create a firewall rule', async () => {
110 const server = new Hapi.Server();
111 StandIn.replaceOnce(CloudApi.prototype, 'fetch', () => {
112 return firewallRule;
113 });
114
115 await server.register(register);
116 await server.initialize();
117 const res = await server.inject({
118 url: '/graphql',
119 method: 'post',
120 payload: { query: `mutation {
121 createFirewallRule(
122 enabled: true
123 rule: "${firewallRule.rule}"
124 description: "${firewallRule.description}"
125 ) { id rule_str enabled } }`
126 }
127 });
128 expect(res.statusCode).to.equal(200);
129 expect(res.result.data.createFirewallRule.id).to.equal(firewallRule.id);
130 expect(res.result.data.createFirewallRule.rule_str).to.equal(firewallRule.rule);
131 expect(res.result.data.createFirewallRule.enabled).to.equal(firewallRule.enabled);
132 });
133
134 it('can update a firewall rule', async () => {
135 const server = new Hapi.Server();
136 StandIn.replaceOnce(CloudApi.prototype, 'fetch', () => {
137 return firewallRule;
138 });
139
140 await server.register(register);
141 await server.initialize();
142 const res = await server.inject({
143 url: '/graphql',
144 method: 'post',
145 payload: { query: `mutation {
146 updateFirewallRule(
147 id: "${firewallRule.id}"
148 enabled: true
149 rule: "${firewallRule.rule}"
150 description: "${firewallRule.description}"
151 ) { id rule_str enabled } }`
152 }
153 });
154 expect(res.statusCode).to.equal(200);
155 expect(res.result.data.updateFirewallRule.id).to.equal(firewallRule.id);
156 expect(res.result.data.updateFirewallRule.rule_str).to.equal(firewallRule.rule);
157 expect(res.result.data.updateFirewallRule.enabled).to.equal(firewallRule.enabled);
158 });
159
160 it('can enable a firewall rule', async () => {
161 const server = new Hapi.Server();
162 StandIn.replaceOnce(CloudApi.prototype, 'fetch', () => {
163 return firewallRule;
164 });
165
166 await server.register(register);
167 await server.initialize();
168 const res = await server.inject({
169 url: '/graphql',
170 method: 'post',
171 payload: { query: `mutation {
172 enableFirewallRule(id: "${firewallRule.id}") { id rule_str enabled } }`
173 }
174 });
175 expect(res.statusCode).to.equal(200);
176 expect(res.result.data.enableFirewallRule.id).to.equal(firewallRule.id);
177 expect(res.result.data.enableFirewallRule.rule_str).to.equal(firewallRule.rule);
178 expect(res.result.data.enableFirewallRule.enabled).to.equal(true);
179 });
180
181 it('can disable a firewall rule', async () => {
182 const server = new Hapi.Server();
183 StandIn.replaceOnce(CloudApi.prototype, 'fetch', () => {
184 const alteredFirewall = Object.assign({}, firewallRule, { enabled: false });
185 return alteredFirewall;
186 });
187
188 await server.register(register);
189 await server.initialize();
190 const res = await server.inject({
191 url: '/graphql',
192 method: 'post',
193 payload: { query: `mutation {
194 disableFirewallRule(id: "${firewallRule.id}") { id rule_str enabled } }`
195 }
196 });
197 expect(res.statusCode).to.equal(200);
198 expect(res.result.data.disableFirewallRule.id).to.equal(firewallRule.id);
199 expect(res.result.data.disableFirewallRule.rule_str).to.equal(firewallRule.rule);
200 expect(res.result.data.disableFirewallRule.enabled).to.equal(false);
201 });
202
203 it('can delete a firewall rule', async () => {
204 const server = new Hapi.Server();
205 StandIn.replace(CloudApi.prototype, 'fetch', () => {
206 return firewallRule;
207 }, { replaceAfter: 2 });
208
209 await server.register(register);
210 await server.initialize();
211 const res = await server.inject({
212 url: '/graphql',
213 method: 'post',
214 payload: { query: `mutation {
215 deleteFirewallRule(id: "${firewallRule.id}") { id rule_str enabled } }`
216 }
217 });
218 expect(res.statusCode).to.equal(200);
219 expect(res.result.data.deleteFirewallRule.id).to.equal(firewallRule.id);
220 expect(res.result.data.deleteFirewallRule.rule_str).to.equal(firewallRule.rule);
221 expect(res.result.data.deleteFirewallRule.enabled).to.equal(firewallRule.enabled);
222 });
223});