Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion template/src/lib/conditionals.lua
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ function Conditionals:_getNextConditionalId()
local currentConditionals = {}
for _, keys in pairs(self:getConditionals()) do
for _, conditional in pairs(keys) do
currentConditionals[conditional.conditionalId] = true
if Select(conditional, "conditionalId") ~= nil then
currentConditionals[conditional.conditionalId] = true
end
end
end
local nextId = CONDITIONAL_ID_START
Expand Down
10 changes: 7 additions & 3 deletions template/src/lib/events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,10 @@ function Events:restoreEvents()
local usedEventIds = {}
for _, keys in pairs(self:getEvents()) do
for _, event in pairs(keys) do
usedEventIds[event.eventId] = true
C4:AddEvent(event.eventId, event.name, event.description)
if Select(event, "eventId") ~= nil then
usedEventIds[event.eventId] = true
C4:AddEvent(event.eventId, event.name, event.description)
end
end
end
for id = EVENT_ID_START, EVENT_ID_END do
Expand All @@ -140,7 +142,9 @@ function Events:_getNextEventId()
local currentEvents = {}
for _, keys in pairs(self:getEvents()) do
for _, event in pairs(keys) do
currentEvents[event.eventId] = true
if Select(event, "eventId") ~= nil then
currentEvents[event.eventId] = true
end
end
end
local nextId = EVENT_ID_START
Expand Down
67 changes: 67 additions & 0 deletions template/test/test_saved_entries_without_ids.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
-- What lib/conditionals.lua and lib/events.lua do with a saved record that comes back without its id, or as
-- something other than a table. Restoring events and finding the next free id indexed by that id, so one such
-- record threw "table index is nil" at the start of OnDriverLateInit and stopped the driver from starting.
--
-- Run from the driver root:
-- make test
-- or:
-- ./test/run_test.sh test_saved_entries_without_ids.lua

local T = require("testlib")

require("c4_shim")
require("drivers-common-public.global.handlers") -- TC

local persist = require("lib.persist")

--- Saves records under key the way a driver might find them: one whole, one without its id and one that is not a
--- table. Then fresh modules read them back, as after a restart.
local function savedAfterRestart(key, whole, noId)
persist:set(key, { Buttons = { whole = whole, noId = noId, notATable = "x" } })
ShimPersistLand()
T.unload("^lib%.")
ShimResetEvents()
persist = require("lib.persist")
end

--- The keys of t, sorted.
local function keys(t)
local out = {}
for k in pairs(t or {}) do
out[#out + 1] = k
end
table.sort(out)
return out
end

T.section("a saved conditional without its id is skipped")
savedAfterRestart(
"Conditionals",
{ conditionalId = 10, name = "CONDITIONAL_10", type = "BOOL", condition_statement = "IS", description = "Whole" },
{ name = "CONDITIONAL_LOST", type = "BOOL", condition_statement = "IS", description = "Lost its id" }
)
local conditionals = require("lib.conditionals")
local ok, added = pcall(conditionals.upsertConditional, conditionals, "Buttons", "new", {
type = "BOOL",
condition_statement = "IS",
description = "New",
}, function()
return true
end)
T.truthy("a new one is added", ok, added)
T.eq("under the next free id", ok and added.conditionalId, 11)

T.section("a saved event without its id is skipped")
savedAfterRestart(
"Events",
{ eventId = 10, name = "Whole", description = "When whole" },
{ name = "Lost", description = "Lost its id" }
)
local events = require("lib.events")
T.truthy("restoreEvents runs", pcall(events.restoreEvents, events))
T.eq("and declares only the whole one", keys(ShimEvents()), { 10 })
ok, added = pcall(events.getOrAddEvent, events, "Buttons", "new", "New", "When new")
T.truthy("a new one is added", ok, added)
T.eq("under the next free id", ok and added.eventId, 11)

T.finish()
1 change: 1 addition & 0 deletions tests/template-renders/crypto-bundles.files
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/dc-product.files
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/default.files
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/diagnostics.files
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/oauth.files
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/stale-issues-no-exempt.files
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/stale-issues.files
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/ui-expressions.files
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/ui.files
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
1 change: 1 addition & 0 deletions tests/template-renders/variant-readme.files
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ test/test_persist_missing_key.lua
test/test_persist_reload.lua
test/test_persist_undecodable.lua
test/test_persist_write_behind.lua
test/test_saved_entries_without_ids.lua
test/test_secret_sends_trace.lua
test/test_sensor_params.lua
test/test_shim_bindings.lua
Expand Down
Loading