Skip to content

Commit

Permalink
enables testing with real repo information
Browse files Browse the repository at this point in the history
  • Loading branch information
javierbrk committed Nov 27, 2023
1 parent b7dd972 commit ac7c595
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 10 deletions.
5 changes: 4 additions & 1 deletion packages/eupgrade/files/usr/lib/lua/eupgrade.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ function eup.get_upgrade_api_url()
end

function eup.set_upgrade_api_url(url)
return uci:set('eupgrade', 'main', 'api_url',url)
status = uci:set('eupgrade', 'main', 'api_url',url)
uci:save('eupgrade')
uci:commit('eupgrade')
return status
end

function eup._check_signature(file_path, signature_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,21 @@ end
function mesh_upgrade.start_node_download(url)
local uci = config.get_uci_cursor()
eupgrade.set_upgrade_api_url(url)
status = uci:set('eupgrade', 'main', 'api_url',url)
uci:save('eupgrade')
uci:commit('eupgrade')
local cached_only = false
--download new firmware if necessary
config.log("is_new_version_available ")

local latest_data = eupgrade.is_new_version_available(cached_only)
if latest_data then
config.log("start_node_download ")
mesh_upgrade.change_state(mesh_upgrade.upgrade_states.DOWNLOADING)
config.log("downloading")

local image = eupgrade.download_firmware(latest_data)

uci:set('mesh-upgrade', 'main', 'eup_STATUS', eupgrade.get_download_status())
if eupgrade.get_download_status() == eupgrade.STATUS_DOWNLOADED then
mesh_upgrade.change_state(mesh_upgrade.upgrade_states.READY_FOR_UPGRADE)
Expand Down Expand Up @@ -137,7 +146,7 @@ end
-- This line will genereate recursive dependencies like in pirania pakcage
function mesh_upgrade.trigger_sheredstate_publish()
utils.execute_daemonized(
"/etc/shared-state/publishers/endshared-state-publish_mesh_wide_upgrade && shared-state sync mesh_wide_upgrade")
"/etc/shared-state/publishers/shared-state-publish_mesh_wide_upgrade && shared-state sync mesh_wide_upgrade")
end

--! changes the state of the upgrade and verifies that state transition is possible.
Expand Down
109 changes: 101 additions & 8 deletions packages/lime-mesh-upgrade/tests/test_lime-mesh-upgrade.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ local test_utils = require 'tests.utils'
local lime_mesh_upgrade = require 'lime-mesh-upgrade'
eupgrade = require 'eupgrade'

utils.enable_logging()


-- disable logging in config module
config.log = function(text)
Expand All @@ -17,7 +19,7 @@ local upgrade_data =
type= "upgrade",
data={
firmware_ver="xxxx",
repo_url="http://10.13.0.1/lros/api/v1/",
repo_url="http://repo.librerouter.org/lros/api/v1/latest/",
upgrde_state="starting,downloading|ready_for_upgrade|upgrade_scheluded|confirmation_pending|~~confirmed~~|updated|error",
error="CODE",
safe_upgrade_status="",
Expand All @@ -29,7 +31,7 @@ local upgrade_data =
master_node="prmiero"
}

local latest_release_data = [[
local latest_release_data_sample = [[
{
"metadata-version": 1,
"images": [
Expand All @@ -48,25 +50,56 @@ local latest_release_data = [[
}
]]

local latest_release_data_real = [[
{
"metadata-version": 1,
"images": [
{
"name": "upgrade-lr-1.5.sh",
"type": "installer",
"download-urls": [
"http://repo.librerouter.org/lros/releases/1.5/targets/ath79/generic/upgrade-lr-1.5.sh"
],
"sha256": "cec8920f93055cc57cfde1f87968e33ca5215b2df88611684195077402079acb"
},
{
"name": "firmware.bin",
"type": "sysupgrade",
"download-urls": [
"http://repo.librerouter.org/lros/releases/1.5/targets/ath79/generic/librerouteros-1.5-r0+11434-e93615c947-ath79-generic-librerouter_librerouter-v1-squashfs-sysupgrade.bin"
],
"sha256": "2da0abb549d6178a7978b357be3493d5aff5c07b993ea0962575fa61bef18c27"
}
],
"board": "librerouter,librerouter-v1",
"version": "LibreRouterOs 1.5 r0+11434-e93615c947",
"release-info-url": "https://foro.librerouter.org/t/lanzamiento-librerouteros-1-5/337"
}
]]
local latest_release_data_real_sig = [[
untrusted comment: signed by key 47513b83fbc579cd
RWRHUTuD+8V5zSCR6+HGnzSU8qhf1d8K8PqOCo/OYLFAXBeiICUXV33BY3o1ihDWcGbFTBLh8jidfhSkWQev5NoT1PTOTOLvZwc=
]]

describe('LiMe mesh upgrade', function()

it('test get mesh config fresh start', function()
config.log("\n test set mesh config.... \n")
local status = lime_mesh_upgrade.get_mesh_upgrade_status()
utils.printJson(status)
assert.is.equal(status.transaction_state, lime_mesh_upgrade.transaction_states.NO_TRANSACTION)
assert.is.equal(lime_mesh_upgrade.started(),false)
end)

it('test set mesh config', function()
config.log("test set mesh config.... ")

it('test set mesh config and get status', function()
stub(eupgrade, '_get_board_name', function () return 'test-board' end)
stub(eupgrade, '_get_current_fw_version', function () return 'LibreMesh 19.05' end)
stub(eupgrade, '_check_signature', function () return true end)
stub(utils, 'http_client_get', function () return latest_release_data end)
stub(utils, 'http_client_get', function () return latest_release_data_sample end)
stub(eupgrade, '_file_sha256', function () return 'fbd95fc091ea10cfa05cfb0ef870da43124ac7c1402890eb8f03b440c57d7b5' end)

assert.is.equal('LibreMesh 20.10', eupgrade.is_new_version_available()['version'])

lime_mesh_upgrade.set_mesh_upgrade_info(upgrade_data,lime_mesh_upgrade.upgrade_states.STARTING)
status = lime_mesh_upgrade.get_mesh_upgrade_status()
utils.printJson(status)
Expand All @@ -75,16 +108,76 @@ describe('LiMe mesh upgrade', function()
assert.is.equal(status.data.upgrade_state, lime_mesh_upgrade.upgrade_states.ERROR)
assert.is.equal(status.data.eup_STATUS, eupgrade.STATUS_DOWNLOAD_FAILED)
assert.is.equal(status.transaction_state, lime_mesh_upgrade.transaction_states.STARTED)
-- assert.is.equal(status.transaction_state, lime_mesh_upgrade.transaction_states.ABORTED)
--TODO: javi en caso de falla ... reintentar ? abortar ?
end)
it('test set mesh config start download and assert status ready_for_upgrade', function()
stub(eupgrade, '_get_board_name', function () return 'test-board' end)
stub(eupgrade, '_get_current_fw_version', function () return 'LibreMesh 19.05' end)
stub(eupgrade, '_check_signature', function () return true end)
stub(utils, 'http_client_get', function () return latest_release_data_sample end)
stub(eupgrade, '_file_sha256', function () return 'fbd95fce091ea10cfa05cfb0ef870da43124ac7c1402890eb8f03b440c57d7b5' end)

assert.is.equal('LibreMesh 20.10', eupgrade.is_new_version_available()['version'])
lime_mesh_upgrade.set_mesh_upgrade_info(upgrade_data,lime_mesh_upgrade.upgrade_states.STARTING)
status = lime_mesh_upgrade.get_mesh_upgrade_status()
utils.printJson(status)
assert.is.equal(status.master_node, upgrade_data.master_node)
assert.is.equal(status.data.repo_url,upgrade_data.data.repo_url )
assert.is.equal(status.data.upgrade_state, lime_mesh_upgrade.upgrade_states.READY_FOR_UPGRADE)
assert.is.equal(status.data.eup_STATUS, eupgrade.STATUS_DOWNLOADED)
assert.is.equal(status.transaction_state, lime_mesh_upgrade.transaction_states.STARTED)
end)

it('test set mesh config start download and assert status ready_for_upgrade', function()
stub(eupgrade, '_get_board_name', function () return 'librerouter-v1' end)
stub(eupgrade, '_get_current_fw_version', function () return 'LibreMesh 19.05' end)
stub(eupgrade, '_check_signature', function () return true end)
stub(eupgrade, '_file_sha256', function () return 'cec8920f93055cc57cfde1f87968e33ca5215b2df88611684195077402079acb' end)
--todo: javi este netodo no seria necesario que sea stub porque deberia tomar la url del set upgrade api pero no toma el config uci
stub(eupgrade, 'get_upgrade_api_url', function () return 'http://repo.librerouter.org/lros/api/v1/' end)
stub(utils, 'http_client_get',
function (url,to,file)
config.log("http_client_get "..url .. " "..to.. (args or ""))
if url == "http://repo.librerouter.org/lros/releases/1.5/targets/ath79/generic/upgrade-lr-1.5.sh" then
return true
end
if url == "http://repo.librerouter.org/lros/api/v1/latest/librerouter-v1.json.sig" then
return latest_release_data_real
end
if url == "http://repo.librerouter.org/lros/api/v1/latest/librerouter-v1.json" then
return latest_release_data_real_sig
end
config.log("http_client_get "..url .. " "..to.. (args or ""))
config.log("http_client_get "..url .. " "..to.. (args or ""))
config.log("http_client_get "..url .. " "..to.. (args or ""))
config.log("http_client_get "..url .. " "..to.. (args or ""))
config.log("http_client_get "..url .. " "..to.. (args or ""))

return true
end)
--assert.is.equal('LibreRouterOs 1.5 r0+11434-e93615c947', eupgrade.is_new_version_available()['version'])
lime_mesh_upgrade.set_mesh_upgrade_info(upgrade_data,lime_mesh_upgrade.upgrade_states.STARTING)
status = lime_mesh_upgrade.get_mesh_upgrade_status()
utils.printJson(status)
assert.is.equal(status.master_node, upgrade_data.master_node)
assert.is.equal(status.data.repo_url,upgrade_data.data.repo_url )
assert.is.equal(status.data.upgrade_state, lime_mesh_upgrade.upgrade_states.READY_FOR_UPGRADE)
assert.is.equal(status.data.eup_STATUS, eupgrade.STATUS_DOWNLOADED)
assert.is.equal(status.transaction_state, lime_mesh_upgrade.transaction_states.STARTED)
end)

before_each('', function()
snapshot = assert:snapshot()
uci = test_utils.setup_test_uci()
config.log (uci:set('mesh-upgrade', 'main', "mesh-upgrade"))
uci:set('mesh-upgrade', 'main', "mesh-upgrade")
uci:save('mesh-upgrade')
uci:commit('mesh-upgrade')
end)

after_each('', function()
snapshot:revert()
test_utils.teardown_test_uci(uci)
test_utils.teardown_test_dir()
end)
end)

0 comments on commit ac7c595

Please sign in to comment.