summaryrefslogtreecommitdiffstats
path: root/tests/node.d
diff options
context:
space:
mode:
authorBrainDoctor <github.account@chrigel.net>2017-07-18 16:16:11 +0200
committerBrainDoctor <github.account@chrigel.net>2017-07-18 21:14:52 +0200
commit1b54db67ba71dd2c65dd31d49cb8798ac4cc4d89 (patch)
treec6febfe64b0b26aec440a160fe2712666cd979d2 /tests/node.d
parent64f6191801edbdd2cf3d15178a8fdef879cd574c (diff)
more unit tests for fronius plugin
Diffstat (limited to 'tests/node.d')
-rw-r--r--tests/node.d/fronius.chart.spec.js102
-rw-r--r--tests/node.d/fronius.parse.spec.js67
-rw-r--r--tests/node.d/fronius.spec.js58
-rw-r--r--tests/node.d/fronius.validation.spec.js158
4 files changed, 327 insertions, 58 deletions
diff --git a/tests/node.d/fronius.chart.spec.js b/tests/node.d/fronius.chart.spec.js
new file mode 100644
index 0000000000..c9c75f9c3c
--- /dev/null
+++ b/tests/node.d/fronius.chart.spec.js
@@ -0,0 +1,102 @@
+"use strict";
+
+var netdata = require("../../node.d/node_modules/netdata");
+// remember: subject will be a singleton!
+var subject = require("../../node.d/fronius.node");
+
+var service = netdata.service({
+ name: "fronius",
+ module: this
+});
+
+describe("fronius chart creation", function () {
+
+ beforeAll(function () {
+ // change this to enable debug log
+ netdata.options.DEBUG = false;
+ });
+
+ it("should return a basic chart dimension", function () {
+ var result = subject.createBasicDimension("id", "name", 2);
+
+ expect(result.divisor).toBe(2);
+ expect(result.id).toBe("id");
+ expect(result.algorithm).toEqual(netdata.chartAlgorithms.absolute);
+ expect(result.multiplier).toBe(1);
+ });
+
+ it("should return the power chart definition", function () {
+ var id = "power";
+ var result = subject.getSitePowerChart(service, id);
+
+ expect(result.id).toBe(id);
+ expect(result.units).toBe("W");
+ expect(result.type).toBe(netdata.chartTypes.area);
+ expect(result.family).toBe("power");
+ expect(result.context).toBe("fronius.power");
+ expect(result.dimensions[subject.powerGridId].name).toBe("Grid");
+ expect(result.dimensions[subject.powerPvId].name).toBe("Photovoltaics");
+ expect(result.dimensions[subject.powerAccuId].name).toBe("Accumulator");
+ expect(Object.keys(result.dimensions).length).toBe(3);
+ });
+
+ it("should return the consumption chart definition", function () {
+ var id = "Load";
+ var result = subject.getSiteConsumptionChart(service, id);
+
+ expect(result.id).toBe(id);
+ expect(result.units).toBe("W");
+ expect(result.type).toBe(netdata.chartTypes.area);
+ expect(result.family).toBe("consumption");
+ expect(result.context).toBe("fronius.consumption");
+ expect(Object.keys(result.dimensions).length).toBe(1);
+ expect(result.dimensions[subject.consumptionLoadId].name).toBe("Load");
+ });
+
+ it("should return the autonomy chart definition", function () {
+ var id = "Autonomy";
+ var result = subject.getSiteAutonomyChart(service, id);
+
+ expect(result.id).toBe(id);
+ expect(result.units).toBe("%");
+ expect(result.type).toBe(netdata.chartTypes.area);
+ expect(result.family).toBe("autonomy");
+ expect(result.context).toBe("fronius.autonomy");
+ expect(Object.keys(result.dimensions).length).toBe(2);
+ expect(result.dimensions[subject.autonomyId].name).toBe("Autonomy");
+ expect(result.dimensions[subject.consumptionSelfId].name).toBe("Self Consumption");
+ });
+
+ it("should return the energy today chart definition", function () {
+ var id = "Energy today";
+ var result = subject.getSiteEnergyTodayChart(service, id);
+
+ expect(result.id).toBe(id);
+ expect(result.units).toBe("kWh");
+ expect(result.type).toBe(netdata.chartTypes.area);
+ expect(result.family).toBe("energy");
+ expect(result.context).toBe("fronius.energy.today");
+ expect(Object.keys(result.dimensions).length).toBe(1);
+ expect(result.dimensions[subject.energyTodayId].name).toBe("Today");
+ });
+
+ it("should return the energy year chart definition", function () {
+ var id = "Energy year";
+ var result = subject.getSiteEnergyYearChart(service, id);
+
+ expect(result.id).toBe(id);
+ expect(result.units).toBe("kWh");
+ expect(result.type).toBe(netdata.chartTypes.area);
+ expect(result.family).toBe("energy");
+ expect(result.context).toBe("fronius.energy.year");
+ expect(Object.keys(result.dimensions).length).toBe(1);
+ expect(result.dimensions[subject.energyYearId].name).toBe("Year");
+ });
+
+ it("should return the same chart definition on second call for lazy loading", function () {
+ var first = subject.getSitePowerChart(service, "id");
+ var second = subject.getSitePowerChart(service, "id");
+
+ expect(first).toBe(second);
+ });
+}); \ No newline at end of file
diff --git a/tests/node.d/fronius.parse.spec.js b/tests/node.d/fronius.parse.spec.js
new file mode 100644
index 0000000000..a6f1cee305
--- /dev/null
+++ b/tests/node.d/fronius.parse.spec.js
@@ -0,0 +1,67 @@
+"use strict";
+
+var netdata = require("../../node.d/node_modules/netdata");
+// remember: subject will be a singleton!
+var subject = require("../../node.d/fronius.node");
+
+var service = netdata.service({
+ name: "fronius",
+ module: this
+});
+
+describe("fronius data parsing", function () {
+
+ var fakeResponse = {
+ "Head" : {
+ "RequestArguments" : {},
+ "Status" : {
+ "Code" : 0,
+ "Reason" : "",
+ "UserMessage" : ""
+ },
+ "Timestamp" : "2017-07-17T16:01:04+02:00"
+ },
+ "Body" : {
+ "Data" : {
+ "Site" : {
+ "Mode" : "meter",
+ "P_Grid" : -3430.729923,
+ "P_Load" : -910.270077,
+ "P_Akku" : null,
+ "P_PV" : 4341,
+ "rel_SelfConsumption" : 20.969133,
+ "rel_Autonomy" : 100,
+ "E_Day" : 57230,
+ "E_Year" : 6425915.5,
+ "E_Total" : 15388710,
+ "Meter_Location" : "grid"
+ },
+ "Inverters" : {
+ "1" : {
+ "DT" : 123,
+ "P" : 4341,
+ "E_Day" : 57230,
+ "E_Year" : 6425915.5,
+ "E_Total" : 15388710
+ }
+ }
+ }
+ }
+ };
+
+ beforeAll(function () {
+ // change this to enable debug log
+ netdata.options.DEBUG = false;
+ });
+
+ it("should return a parsed value", function () {
+ // arrange
+ netdata.send = jasmine.createSpy("send");
+ // act
+ subject.processResponse(service, fakeResponse);
+ var result = netdata.send.calls.argsFor(0)[0];
+ // assert
+ expect(result).toContain("SET p_grid = -3431");
+ });
+
+});
diff --git a/tests/node.d/fronius.spec.js b/tests/node.d/fronius.spec.js
deleted file mode 100644
index 11581552a0..0000000000
--- a/tests/node.d/fronius.spec.js
+++ /dev/null
@@ -1,58 +0,0 @@
-"use strict";
-// delete these comments if not needed anymore.
-
-var netdata = require("../../node.d/node_modules/netdata");
-var fronius = require("../../node.d/fronius.node");
-
-describe("fronius chart creation", function () {
-
- beforeAll(function () {
- // change this to enable debug log
- netdata.options.DEBUG = false;
- });
-
- it("should return a basic chart definition", function () {
- // act
- var result = fronius.createBasicDimension("id", "name", 2);
- // assert
- expect(result.divisor).toBe(2);
- expect(result.id).toBe("id");
- expect(result.algorithm).toEqual("absolute");
- expect(result.multiplier).toBe(1);
- });
-
- it("will fail", function () {
- netdata.debug("test");
-
- throw new Error("demonstrate failure of unit test runner");
- });
-
-});
-
-describe("fronius data parsing", function () {
-
- var service = netdata.service({
- name: "fronius",
- module: this
- });
-
- // this is a faked JSON response from the server.
- // Used with freeformatter.com/json-escape.html to escape the json and turn it into a string.
- var fakeResponse = "{\r\n\t\"Head\" : {\r\n\t\t\"RequestArguments\" : {},\r\n\t\t\"Status\" : {\r\n\t\t\t\"Code\" : 0,\r\n\t\t\t\"Reason\" : \"\",\r\n\t\t\t\"UserMessage\" : \"\"\r\n\t\t},\r\n\t\t\"Timestamp\" : \"2017-07-17T16:01:04+02:00\"\r\n\t},\r\n\t\"Body\" : {\r\n\t\t\"Data\" : {\r\n\t\t\t\"Site\" : {\r\n\t\t\t\t\"Mode\" : \"meter\",\r\n\t\t\t\t\"P_Grid\" : -3430.729923,\r\n\t\t\t\t\"P_Load\" : -910.270077,\r\n\t\t\t\t\"P_Akku\" : null,\r\n\t\t\t\t\"P_PV\" : 4341,\r\n\t\t\t\t\"rel_SelfConsumption\" : 20.969133,\r\n\t\t\t\t\"rel_Autonomy\" : 100,\r\n\t\t\t\t\"E_Day\" : 57230,\r\n\t\t\t\t\"E_Year\" : 6425915.5,\r\n\t\t\t\t\"E_Total\" : 15388710,\r\n\t\t\t\t\"Meter_Location\" : \"grid\"\r\n\t\t\t},\r\n\t\t\t\"Inverters\" : {\r\n\t\t\t\t\"1\" : {\r\n\t\t\t\t\t\"DT\" : 123,\r\n\t\t\t\t\t\"P\" : 4341,\r\n\t\t\t\t\t\"E_Day\" : 57230,\r\n\t\t\t\t\t\"E_Year\" : 6425915.5,\r\n\t\t\t\t\t\"E_Total\" : 15388710\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"
-
- beforeAll(function () {
- // change this to enable debug log
- netdata.options.DEBUG = false;
- });
-
- it("should return a parsed value", function () {
- // arrange
- netdata.send = jasmine.createSpy("send");
- // act
- fronius.processResponse(service, fakeResponse);
- var result = netdata.send.calls.argsFor(0)[0];
- // assert
- expect(result).toContain("SET p_grid = -3431");
- });
-
-});
diff --git a/tests/node.d/fronius.validation.spec.js b/tests/node.d/fronius.validation.spec.js
new file mode 100644
index 0000000000..06241f3ceb
--- /dev/null
+++ b/tests/node.d/fronius.validation.spec.js
@@ -0,0 +1,158 @@
+"use strict";
+
+var netdata = require("../../node.d/node_modules/netdata");
+// remember: subject will be a singleton!
+var subject = require("../../node.d/fronius.node");
+
+var service = netdata.service({
+ name: "fronius",
+ module: this
+});
+
+describe("fronius response validation", function () {
+
+ // this is a faked JSON response from the server.
+ // Used with freeformatter.com/json-escape.html to escape the json and turn it into a string.
+ var fakeResponse = "{\r\n\t\"Head\" : {\r\n\t\t\"RequestArguments\" : {},\r\n\t\t\"Status\" " +
+ ": {\r\n\t\t\t\"Code\" : 0,\r\n\t\t\t\"Reason\" : \"\",\r\n\t\t\t\"UserMessage\" : " +
+ "\"\"\r\n\t\t},\r\n\t\t\"Timestamp\" : \"2017-07-17T16:01:04+02:00\"\r\n\t},\r\n\t\"Body\" : " +
+ "{\r\n\t\t\"Data\" : {\r\n\t\t\t\"Site\" : {\r\n\t\t\t\t\"Mode\" : \"meter\",\r\n\t\t\t\t\"P_Grid\" " +
+ ": -3430.729923,\r\n\t\t\t\t\"P_Load\" : -910.270077,\r\n\t\t\t\t\"P_Akku\" : " +
+ "null,\r\n\t\t\t\t\"P_PV\" : 4341,\r\n\t\t\t\t\"rel_SelfConsumption\" : " +
+ "20.969133,\r\n\t\t\t\t\"rel_Autonomy\" : 100,\r\n\t\t\t\t\"E_Day\" : 57230,\r\n\t\t\t\t\"E_Year\" " +
+ ": 6425915.5,\r\n\t\t\t\t\"E_Total\" : 15388710,\r\n\t\t\t\t\"Meter_Location\" : " +
+ "\"grid\"\r\n\t\t\t},\r\n\t\t\t\"Inverters\" : {\r\n\t\t\t\t\"1\" : {\r\n\t\t\t\t\t\"DT\" : " +
+ "123,\r\n\t\t\t\t\t\"P\" : 4341,\r\n\t\t\t\t\t\"E_Day\" : 57230,\r\n\t\t\t\t\t\"E_Year\" : " +
+ "6425915.5,\r\n\t\t\t\t\t\"E_Total\" : 15388710\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}";
+
+ it("should do nothing if response is null", function () {
+ netdata.send = jasmine.createSpy("send");
+
+ subject.processResponse(service, null);
+ var result = netdata.send.calls.count();
+
+ expect(result).toBe(0);
+ });
+
+ it("should return null if response is null", function () {
+ var result = subject.parseResponse(null);
+
+ expect(result).toBeNull();
+ });
+
+ it("should return true if response is valid", function () {
+ var result = subject.isResponseValid({
+ "Body": {
+ "Data": {
+ "Site": {
+ "Mode": "meter"
+ },
+ "Inverters": {
+ "1": {}
+ }
+ }
+ }
+ });
+
+ expect(result).toBeTruthy();
+ });
+
+ it("should return false if response is missing data", function () {
+ var result = subject.isResponseValid({
+ "Body": {}
+ });
+
+ expect(result).toBeFalsy();
+ });
+
+ it("should return false if response is missing inverter", function () {
+ var result = subject.isResponseValid({
+ "Body": {
+ "Data": {
+ "Site": {}
+ }
+ }
+ });
+
+ expect(result).toBeFalsy();
+ });
+
+ it("should return false if response is missing inverter", function () {
+ var result = subject.isResponseValid({
+ "Body": {
+ "Data": {
+ "Inverters": {}
+ }
+ }
+ });
+
+ expect(result).toBeFalsy();
+ });
+
+});
+
+describe("fronius configuration validation", function () {
+
+ it("should return 0 if there are no servers configured", function () {
+ var result = subject.configure({});
+
+ expect(result).toBe(0);
+ });
+
+ it("should return 0 if the servers array is empty", function () {
+ var result = subject.configure({
+ "servers": []
+ });
+
+ expect(result).toBe(0);
+ });
+
+ it("should return 0 if there is one server configured incorrectly", function () {
+ var result = subject.configure({
+ "servers": [{}]
+ });
+
+ expect(result).toBe(0);
+ });
+
+ it("should return 1 if there is one server configured", function () {
+ subject.serviceExecute = jasmine.createSpy("serviceExecute");
+ var name = "solar1";
+ var result = subject.configure({
+ "servers": [{
+ "name": name,
+ "api_path": "/api/",
+ "hostname": "solar1.local"
+ }]
+ });
+
+ expect(result).toBe(1);
+ expect(subject.serviceExecute).toHaveBeenCalledWith(name, "solar1.local/api/", 5);
+ });
+
+ it("should return 2 if there are two servers configured", function () {
+ subject.serviceExecute = jasmine.createSpy("serviceExecute");
+ var name1 = "solar 1";
+ var name2 = "solar 2";
+ var result = subject.configure({
+ "servers": [
+ {
+ "name": name1,
+ "api_path": "/",
+ "hostname": "solar1.local"
+ },
+ {
+ "name": name2,
+ "api_path": "/",
+ "hostname": "solar2.local",
+ "update_every": 3
+ }
+ ]
+ });
+
+ expect(result).toBe(2);
+ expect(subject.serviceExecute).toHaveBeenCalledWith(name1, "solar1.local/", 5);
+ expect(subject.serviceExecute).toHaveBeenCalledWith(name2, "solar2.local/", 3);
+ });
+
+}); \ No newline at end of file