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