@@ -9,9 +9,14 @@ module PlaceOS::Core::Api
99 " Content-Type" => " application/json" ,
1010 }
1111
12+ after_each do
13+ Services .reset
14+ end
15+
1216 describe " status/" do
1317 it " renders data about node" do
1418 _, driver, _, resource_manager = create_resources
19+ Services .resource_manager = resource_manager
1520
1621 driver.reload!
1722
@@ -27,10 +32,81 @@ module PlaceOS::Core::Api
2732 resource_manager.try & .stop
2833 end
2934
30- pending " deletes standalone driver binary used for metadata"
31- end
35+ it " returns local driver status for a running module" do
36+ _, driver, mod, resource_manager = create_resources
37+ module_manager = module_manager_mock
38+ Services .module_manager = module_manager
39+ Services .resource_manager = resource_manager
40+ module_manager.load_module(mod)
41+
42+ driver_path = module_manager.store.driver_binary_path(driver.file_name, driver.commit).to_s
43+ route = " #{ namespace } driver?path=#{ URI .encode_path(driver_path)} "
44+ response = client.get(route, headers: json_headers)
45+ response.status_code.should eq 200
46+
47+ status = Status ::DriverStatus .from_json(response.body)
48+ status.local.should_not be_nil
49+ status.local.not_nil!.running.should be_true
50+ status.edge.should be_empty
51+ ensure
52+ module_manager.try & .stop
53+ resource_manager.try & .stop
54+ end
55+
56+ it " returns machine load for local and edge runtimes" do
57+ _, _, _, resource_manager = create_resources
58+ Services .resource_manager = resource_manager
59+ response = client.get(" #{ namespace } load" , headers: json_headers)
60+ response.status_code.should eq 200
61+
62+ load = Status ::MachineLoad .from_json(response.body)
63+ load.local.hostname.should_not be_empty
64+ load.local.cpu_count.should be > 0
65+ load.edge.should be_empty
66+ ensure
67+ resource_manager.try & .stop
68+ end
69+
70+ it " returns loaded module mappings" do
71+ _, _, mod, resource_manager = create_resources
72+ module_manager = module_manager_mock
73+ Services .module_manager = module_manager
74+ Services .resource_manager = resource_manager
75+ module_manager.load_module(mod)
76+
77+ response = client.get(" #{ namespace } loaded" , headers: json_headers)
78+ response.status_code.should eq 200
79+
80+ loaded = Status ::LoadedModules .from_json(response.body)
81+ loaded.local.values.flatten.should contain(mod.id.as(String ))
82+ loaded.edge.should be_empty
83+ ensure
84+ module_manager.try & .stop
85+ resource_manager.try & .stop
86+ end
87+
88+ it " reports persisted edge connection visibility" do
89+ edge = PlaceOS ::Model ::Generator .edge.save!
90+ edge.update_fields(
91+ online: true ,
92+ last_seen: Time .utc
93+ )
94+
95+ module_manager = module_manager_mock
96+ Services .module_manager = module_manager
97+ response = client.get(" #{ namespace } edges" , headers: json_headers)
98+ response.status_code.should eq 200
3299
33- pending " status/driver"
34- pending " status/load"
100+ body = Hash (String , Status ::EdgeConnection ).from_json(response.body)
101+ body[edge.id.as(String )].online.should be_true
102+ body[edge.id.as(String )].last_seen.should_not be_nil
103+ body[edge.id.as(String )].websocket_connected.should be_false
104+ body[edge.id.as(String )].snapshot_version.should be_nil
105+ body[edge.id.as(String )].pending_updates.should eq 0
106+ body[edge.id.as(String )].pending_events.should eq 0
107+ ensure
108+ module_manager.try & .stop
109+ end
110+ end
35111 end
36112end
0 commit comments