* feat(addon): add comprehensive unit tests for addon readers
This commit enhances the test coverage and code quality for the addon reader implementations in the pkg/addon package.
- Refactors all existing addon reader tests (gitee, github, gitlab, local) to use consistent, modern testing patterns like sub-tests.
- Replaces the old memory_reader_test.go with a completely refactored implementation.
- Adds new unit tests for previously untested functions, including various getters, client constructors, and RelativePath helpers.
- Improves http-based tests (gitlab, github, gitee) to use robust mock handlers that correctly simulate API behavior, including pagination and error states.
These changes improve the overall quality and reliability of the addon system and uncovered two minor bugs during the process.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* feat(addon): add more unit tests for addon helpers
This commit continues to improve the test coverage for the pkg/addon package by adding unit tests for several helper and factory functions.
- Adds a test for WrapErrRateLimit to ensure GitHub API rate limit errors are handled correctly.
- Adds a test for ClassifyItemByPattern to verify addon file classification logic.
- Adds a test for the NewAsyncReader factory function to ensure correct reader instantiation.
- Adds tests for various utility functions in utils.go, including IsRegistryFuncs, InstallOptions, ProduceDefConflictError, and GenerateChartMetadata.
These tests increase the reliability of the addon installation and handling logic.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* feat(addon): add unit tests for versioned addon registry
This commit improves test coverage for the versioned addon registry logic in the pkg/addon package.
- Adds a unit test for resolveAddonListFromIndex to verify the logic for parsing Helm index files.
- Introduces a new table-driven test for the internal loadAddon function, covering success and multiple failure scenarios (e.g., version not found, download failure, corrupt data).
- Adds a new test helper, setupAddonTestServer, to create isolated mock HTTP servers for testing addon loading, improving test reliability and clarity.
These tests ensure the core logic for discovering and fetching versioned addons is robust and functions as expected.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* chore(addon): remove unused gitlab testdata path constant
- remove unused gitlab testdata path constant name `gitlabTestdataPath`
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* refactor(addon): improve unit tests based on review feedback
This commit addresses several code review comments to improve the quality, correctness, and robustness of the unit tests in the pkg/addon package.
- Refactors map key assertions in the memory reader test to use the correct "comma ok" idiom instead of assert.NotNil.
- Updates the GitHub reader test to use a compliant addon mock that includes the required template.cue file.
- Modifies the chart metadata test in utils_test.go to use t.TempDir() for better test isolation and automatic cleanup.
- Switches from assert.NotNil to require.NotNil in the versioned registry test to prevent panics on nil pointers.
These changes make the test suite more robust, reliable, and easier to maintain.
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
---------
Signed-off-by: Ashvin Bambhaniya <ashvin.bambhaniya@improwised.com>
* Feat(#5861): Support addon dependencies version ranges
This change enables addon maintainers to define version ranges for
dependencies in an addon's metadata.yaml file.
This behavior is similar to the version range allowed in the `system`
section of the metadata file. The version range expression for
`dependencies` follows the same format as for `system`.
Example:
```yaml
dependencies:
- name: addon1
version: ">= 2.3.3, < 3.0.0"
- name: addon2
version: ">= 0.1.0, < 1.0.0"
```
When installing an addon, the behavior varies depending on whether the
dependency is already installed.
If a dependency is already installed, the installed version will be
validated against the version range, and installation will fail with an
error if there's a mismatch.
If a dependency is not installed, the version range will be used to
select the addon version to be installed. If no addon version matching
the range exists, the installation will fail with an error.
Fixes#5861
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): remove unused ctx parameter
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): Add comment for IsLocalRegistry
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexport AddonInfoMap
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexport addonInfo
Signed-off-by: Michael Russo <merusso@gmail.com>
* chore: replace map[string]addonInfo with addonInfoMap for consistency
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: add short circuit when dependency version is not specified
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: Add test for multiple validation errors
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: Run go mod tidy
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: add tests for ToVersionedRegistry
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: simplify listInstalledAddons loop
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: listAvailableAddons returns addons from multiple sources
Changes:
* implement ListAddonInfo in Registry
* add interface to aid testing of listAvailableAddons
* add tests for listAvailableAddons
Signed-off-by: Michael Russo <merusso@gmail.com>
* refactor: simplify validateAddonDependencies
move logic from validateAddonDependencies to
calculateDependencyVersionToInstall.
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): Implicit memory aliasing in for loop.
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): non-wrapping format verb for fmt.Errorf
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): indent-error-flow: (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexported-return
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): exported type comment format (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): refactor AddonInfo to ItemInfo, avoid "stutter" (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): add comment to exported method Registry.ListAddonInfo
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): fix stutter, rename AddonInfoLister to ItemInfoLister
Signed-off-by: Michael Russo <merusso@gmail.com>
* chore: Add suite tests for Registry.ListAddonInfo()
Signed-off-by: Michael Russo <merusso@gmail.com>
* Test: add test cases for addon.sortVersionsDescending
Signed-off-by: Michael Russo <merusso@gmail.com>
---------
Signed-off-by: Michael Russo <merusso@gmail.com>
* Feat: search useful addon version automatically
Verify whether the current addon version meets the system version requirements according to the obtained specified version. There are two system version requirements: Vela core version, K8s version.
If meet the requirements and continue to perform the next task.
If the requirements are not met, obtain the highest version that meets the requirements
Refs #4181
Signed-off-by: HanMengnan <1448189829@qq.com>
* Fix: Optimize function implementation and code order, and modify test cases
add more comments of function
optimize package import sequence
optimize user interaction logic and error information extraction logic
Signed-off-by: HanMengnan <1448189829@qq.com>
* Fix: change template string of regular expression to const type string
Signed-off-by: HanMengnan <1448189829@qq.com>
* Feat: show available versions and dependencies in `addon status`
Also prettify output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: show addon dependencies in `addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: adjust `addon status` output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: remove spaces in `addon status` output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: truncate string if available versions too long
if a local addon has been installed, the AVAILABLE-VERSIONS column of the registry one will not truncate. this commit fixes that.
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Perf: avoid unnecessary network requests to improve performance
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: do not display remote info for local addons
Limit Description length when using `addon list`
Use simpler method to get addon info
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for cli/addon limitStringLength, generateParameterString
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: fix output being empty if the searched addon does not exist anywhere
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for generateAddonInfo
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for generateAddonInfo and FindWholeAddonPackagesFromRegistry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: format code
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: correct unnecessarily focused tests
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: remove unused code blocks
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: remove unnecessary output to stdout
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: remove added registry after tests has been completed
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: new RegistryDataStore every test, to avoid panics
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: fix failing tests due to incorrect registry name
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: move logic to get addon package out of where it is supposed to get addon status
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add test cases for secret-getting in TestGetAddonStatus
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: return error if an addon is not installed, nor does it exist in the registry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: rename GetAddonWholePackage to GetDetailedAddon as per wonderflow
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: require --verbose option to show details in `vela addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: require --verbose option to show details in `vela addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* chore: run make reviewable
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: fix configmap being already existed
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: fix output show addon does not exist when verbose is off and an addon is not installed, but it does exist in the registry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: fix golangci-lint issues
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>