Skip to content

Commit e5dcc57

Browse files
committed
added new tests
1 parent 2644785 commit e5dcc57

File tree

3 files changed

+169
-1
lines changed

3 files changed

+169
-1
lines changed

tests/icinga.test.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,4 +391,51 @@ describe('icinga', () => {
391391
expect(calls[0][0]).toBe('bar');
392392
});
393393
});
394+
395+
396+
describe('delete services by filter', () => {
397+
it('delete service filtered', async () => {
398+
icinga.deleteService = jest.fn();
399+
IcingaApi.getServiceFiltered = jest.fn()
400+
.mockImplementation((host, cb) => cb(null, [
401+
{attrs: {name: "foo", host_name: "foo"}},
402+
{attrs: {name: "bar", host_name: "bar"}},
403+
]));
404+
405+
await expect(icinga.deleteServicesByFilter('vars.bar==true')).resolves.toEqual(true);
406+
expect(icinga.deleteService.mock.calls.length).toBe(2);
407+
});
408+
409+
it('get services filtered failed', async () => {
410+
IcingaApi.deleteService = jest.fn();
411+
IcingaApi.getServiceFiltered = jest.fn()
412+
.mockImplementation((host, cb) => cb({Statuscode: 500}, null));
413+
414+
await expect(icinga.deleteServicesByFilter('vars.bar==true')).rejects.toEqual({Statuscode: 500});
415+
expect(IcingaApi.deleteService.mock.calls.length).toBe(0);
416+
});
417+
});
418+
419+
describe('delete hosts by filter', () => {
420+
it('delete host filtered', async () => {
421+
icinga.deleteHost = jest.fn();
422+
IcingaApi.getHostFiltered = jest.fn()
423+
.mockImplementation((host, cb) => cb(null, [
424+
{attrs: {name: "foo"}},
425+
{attrs: {name: "bar"}},
426+
]));
427+
428+
await expect(icinga.deleteHostsByFilter('vars.bar==true')).resolves.toEqual(true);
429+
expect(icinga.deleteHost.mock.calls.length).toBe(2);
430+
});
431+
432+
it('get hosts filtered failed', async () => {
433+
IcingaApi.deleteHost = jest.fn();
434+
IcingaApi.getHostFiltered = jest.fn()
435+
.mockImplementation((host, cb) => cb({Statuscode: 500}, null));
436+
437+
await expect(icinga.deleteHostsByFilter('vars.bar==true')).rejects.toEqual({Statuscode: 500});
438+
expect(IcingaApi.deleteHost.mock.calls.length).toBe(0);
439+
});
440+
});
394441
});

tests/kube/ingress.test.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,41 @@ describe('kubernetes ingresses', () => {
114114
await bindings.data(resource);
115115
expect(Icinga.applyHost.mock.calls.length).toBe(1);
116116
});
117+
118+
it('modify ingress object delete and create host', async () => {
119+
let instance = new Ingress(Logger, Node, Icinga, {
120+
hostName: null
121+
});
122+
123+
var resource = {
124+
type: 'MODIFIED',
125+
object: fixture
126+
};
127+
128+
Icinga.applyHost = jest.fn();
129+
Icinga.deleteServicesByFilter = jest.fn();
130+
Icinga.deleteHost = function(name) {
131+
expect(name).toEqual('ingress-foobar-foo');
132+
return new Promise((resolve,reject) => {
133+
resolve(true);
134+
});
135+
};
136+
137+
var bindings = {};
138+
var json = {
139+
on: async function(name, callback) {
140+
bindings[name] = callback;
141+
}
142+
};
143+
144+
await instance.kubeListener(() => {
145+
return json;
146+
});
147+
148+
await bindings.data(resource);
149+
expect(Icinga.applyHost.mock.calls.length).toBe(1);
150+
expect(Icinga.deleteServicesByFilter.mock.calls.length).toBe(0);
151+
});
117152

118153
it('delete ingress object delete', async () => {
119154
let instance = new Ingress(Logger, Node, Icinga);
@@ -321,6 +356,33 @@ describe('kubernetes ingresses', () => {
321356
expect(calls[1][2]['vars.http_ssl']).toBe(true);
322357
});
323358

359+
it('attach services to kube workers if attachToNodes is enabled', async () => {
360+
let instance = new Ingress(Logger, Node, Icinga, {
361+
attachToNodes: true
362+
});
363+
364+
Node.getWorkerNodes = function() {
365+
return ['foo', 'bar'];
366+
};
367+
368+
Icinga.applyService = jest.fn();
369+
Icinga.applyServiceGroup = jest.fn();
370+
Icinga.applyHost = jest.fn();
371+
372+
await instance.prepareObject(fixture);
373+
const calls = Icinga.applyService.mock.calls;
374+
expect(Icinga.applyHost.mock.instances.length).toBe(0);
375+
expect(Icinga.applyService.mock.instances.length).toBe(4);
376+
377+
expect(calls[0][0]).toBe('foo');
378+
expect(calls[1][0]).toBe('bar');
379+
expect(calls[2][0]).toBe('foo');
380+
expect(calls[3][0]).toBe('bar');
381+
expect(calls[0][1]).toBe('foobar.example.org-http--');
382+
expect(calls[1][1]).toBe('foobar.example.org-http--');
383+
expect(calls[2][1]).toBe('barfoo.example.org-http--foo');
384+
expect(calls[3][1]).toBe('barfoo.example.org-http--foo');
385+
});
324386
});
325387

326388
describe('kubernetes annotations', () => {

tests/kube/volume.test.ts

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,42 @@ describe('kubernetes volumes', () => {
109109
await bindings.data(resource);
110110
expect(Icinga.applyHost.mock.calls.length).toBe(1);
111111
});
112+
113+
it('modify ingress object delete and create host', async () => {
114+
let instance = new Volume(Logger, Node, Icinga, {
115+
hostName: null
116+
});
117+
118+
var resource = {
119+
type: 'MODIFIED',
120+
object: fixture
121+
};
122+
123+
Icinga.applyHost = jest.fn();
124+
Icinga.deleteServicesByFilter = jest.fn();
125+
Icinga.deleteHost = function(name) {
126+
expect(name).toEqual('volume-generic-nimble-fad5684e-22fb-11e9-94e3-0050568fe3c2');
127+
return new Promise((resolve,reject) => {
128+
resolve(true);
129+
});
130+
};
131+
132+
var bindings = {};
133+
var json = {
134+
on: async function(name, callback) {
135+
bindings[name] = callback;
136+
}
137+
};
112138

139+
await instance.kubeListener(() => {
140+
return json;
141+
});
142+
143+
await bindings.data(resource);
144+
expect(Icinga.applyHost.mock.calls.length).toBe(1);
145+
expect(Icinga.deleteServicesByFilter.mock.calls.length).toBe(0);
146+
});
147+
113148
it('delete volume object delete', async () => {
114149
let instance = new Volume(Logger, Node, Icinga);
115150

@@ -233,7 +268,7 @@ describe('kubernetes volumes', () => {
233268
});
234269
});
235270

236-
describe('add all volume object http path rules as service objects', () => {
271+
describe('add all volume objects as service objects', () => {
237272
it('create service object', async () => {
238273
let instance = new Volume(Logger, Node, Icinga);
239274

@@ -288,6 +323,30 @@ describe('kubernetes volumes', () => {
288323
expect(Icinga.applyService.mock.instances.length).toBe(1);
289324
expect(calls[0][3]).toEqual(['foo', 'bar']);
290325
});
326+
327+
it('attach services to kube workers if attachToNodes is enabled', async () => {
328+
let instance = new Volume(Logger, Node, Icinga, {
329+
attachToNodes: true
330+
});
331+
332+
Node.getWorkerNodes = function() {
333+
return ['foo', 'bar'];
334+
};
335+
336+
Icinga.applyService = jest.fn();
337+
Icinga.applyServiceGroup = jest.fn();
338+
Icinga.applyHost = jest.fn();
339+
340+
await instance.prepareObject(fixture);
341+
const calls = Icinga.applyService.mock.calls;
342+
expect(Icinga.applyHost.mock.instances.length).toBe(0);
343+
expect(Icinga.applyService.mock.instances.length).toBe(2);
344+
345+
expect(calls[0][0]).toBe('foo');
346+
expect(calls[1][0]).toBe('bar');
347+
expect(calls[0][1]).toBe('generic-nimble-fad5684e-22fb-11e9-94e3-0050568fe3c2');
348+
expect(calls[1][1]).toBe('generic-nimble-fad5684e-22fb-11e9-94e3-0050568fe3c2');
349+
});
291350
});
292351

293352
describe('kubernetes annotations', () => {

0 commit comments

Comments
 (0)