Skip to content

Commit

Permalink
fix: More robust verison handling (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
csgillespie authored Aug 4, 2023
1 parent d23d99f commit bb82de6
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 10 deletions.
2 changes: 1 addition & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# audit.base 0.6.4 _2023-07-08_
# audit.base 0.6.4 _2023-08-04_
- feat: Further unit tests
- fix: Software versions out with DB now handled

Expand Down
14 changes: 9 additions & 5 deletions R/posit_versions.R
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,24 @@ audit_posit_version = function(posit_version, type = c("connect", "workbench", "
versions = get_posit_versions(type = type)
row_number = lookup_version(posit_version, type = type)

if (is.na(row_number) || row_number > 1L) {
if (is.na(row_number)) {
cli::cli_alert_info("The version {posit_version}, of Posit {type} isn't in the database")
} else if (row_number > 1L) {
newer_versions = versions[seq_len(row_number - 1), ]
no_of_versions = length(unique(newer_versions$version)) #nolint
no_of_cves = sum(!is.na(newer_versions$cve)) #nolint
cli::cli_alert_info("Posit {type} is {cli::col_red('out of date')}")
cli::cli_alert_info("There are {cli::col_red(no_of_versions)} newer versions that fix \\
{cli::col_red(no_of_cves)} CVEs")
} else {
cli::cli_alert_info("Post {type} is up to date")
cli::cli_alert_info("Posit {type} is up to date")
}
return(invisible(NULL))
}

lookup_version = function(server_version, type) {
lookup_version = function(posit_version, type) {
versions = get_posit_versions(type = type)
version_as_date = version_to_date(server_version)
version_as_date = version_to_date(posit_version)
if (is.na(version_as_date) || version_as_date < min(versions$date)) {
# Older than DB
row_number = NA_integer_
Expand All @@ -54,7 +56,9 @@ lookup_version = function(server_version, type) {
} else {
# Return matching version; multiple CVEs, so just pick 1
# Rtns an NA when not in the DB
row_number = which(versions$version == server_version)[1]
# Some versions add on additional info, .e.g. 2023.06.0.pro1 - delete
posit_version = stringr::str_extract(posit_version, "^(202[0-9])\\.([01][0-9])\\.[0-9]")
row_number = which(versions$version == posit_version)[1]
}
return(row_number)
}
Expand Down
12 changes: 8 additions & 4 deletions tests/testthat/test-posit_versions.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,21 @@ test_that("Testing check server", {
expect_message(audit_posit_version(latest_version, type),
regexp = "up to date")

expect_message(audit_posit_version(paste0(latest_version, ".pro1"), type),
regexp = "up to date")


# Version not in DB
expect_equal(lookup_version(server_version = "2029.01.01", type), 1)
expect_equal(lookup_version(posit_version = "2029.01.01", type), 1)
# Really old version not in the DB
expect_equal(lookup_version(server_version = "2010.01.01", type),
expect_equal(lookup_version(posit_version = "2010.01.01", type),
NA_integer_)

expect_equal(lookup_version(server_version = "Not in DB", type),
expect_equal(lookup_version(posit_version = "Not in DB", type),
NA_integer_)

# No version in DB
v = lookup_version(server_version = "2022.10.31", type)
v = lookup_version(posit_version = "2022.10.31", type)
expect_true(is.na(v))

expect_message(audit_posit_version("2022.10.0", type),
Expand Down

0 comments on commit bb82de6

Please sign in to comment.