test

package
v0.1.52 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 24, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package test provides mock implementations of Registry gRPC clients for testing.

This package offers mock clients that implement the Registry service interfaces, enabling unit testing without requiring a live Registry service connection.

Overview

The test package provides the following key features:

  • Mock implementations of all Registry gRPC client interfaces
  • Configurable responses for each RPC method
  • Request matching using protocol buffer comparison

Basic Usage

Create a mock registry client and configure expected responses:

mock := &test.MockRegistryClients{
	RegistryClient: test.MockRegistryClient{
		OnListRepos: []test.ReposOnList{{
			Given: &registry.RepoFilter{},
			List: &registry.RepoList{
				Items: []*registry.Repo{{
					Id:   "repo-id",
					Name: "test-repo",
				}},
			},
		}},
	},
}

// Use the mock in place of a real registry client
repos, err := mock.Registry().ListRepos(ctx, &registry.RepoFilter{})

Available Mock Clients

The package provides mock implementations for all Registry services:

  • MockRegistryClients: Aggregates all mock clients and implements registry.Clients
  • MockRegistryClient: Repository and tag management operations
  • MockVulnerabilitiesClient: Vulnerability report operations
  • MockApkoClient: Apko image build and config operations
  • MockEntitlementsClient: Entitlement management operations

Request Matching

Mock responses are matched against incoming requests using protocol buffer comparison. Configure multiple responses for different request patterns:

mock := test.MockRegistryClient{
	OnListRepos: []test.ReposOnList{{
		Given: &registry.RepoFilter{},
		List:  &registry.RepoList{Items: repos},
	}},
}

Error Simulation

Simulate error conditions by setting the Error field:

mock := test.MockRegistryClient{
	OnDeleteRepos: []test.ReposOnDelete{{
		Given: &registry.DeleteRepoRequest{Id: "protected-repo"},
		Error: status.Error(codes.PermissionDenied, "cannot delete protected repo"),
	}},
}

Thread Safety

Mock clients are safe for concurrent read access. Configure all expected responses before using the mock in concurrent tests. Do not modify mock configurations while tests are running.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ArchsOnGet added in v0.1.33

type ArchsOnGet struct {
	Given *registry.ArchRequest
	Get   *registry.Archs
	Error error
}

type BuildReportsOnList added in v0.1.29

type BuildReportsOnList struct {
	Given *registry.BuildReportFilter
	List  *registry.BuildReportList
	Error error
}

type BuildStatusOnGet added in v0.1.33

type BuildStatusOnGet struct {
	Given *registry.BuildReportFilter
	Get   *registry.BuildStatus
	Error error
}

type ChartOnGet added in v0.1.46

type ChartOnGet struct {
	Given *registry.GetChartRequest
	Get   *registry.Chart
	Error error
}

type EntitlementCatalogImagesOnList added in v0.1.38

type EntitlementCatalogImagesOnList struct {
	Given *registry.EntitlementImagesFilter
	List  *registry.EntitlementImagesList
	Error error
}

type EntitlementImagesOnList added in v0.1.35

type EntitlementImagesOnList struct {
	Given *registry.EntitlementImagesFilter
	List  *registry.EntitlementImagesList
	Error error
}

type EntitlementSummaryOnGet added in v0.1.35

type EntitlementSummaryOnGet struct {
	Given *registry.EntitlementSummaryRequest
	Get   *registry.EntitlementSummaryResponse
	Error error
}

type EntitlementsOnList added in v0.1.35

type EntitlementsOnList struct {
	Given *registry.EntitlementFilter
	List  *registry.EntitlementList
	Error error
}

type EolTagOnList added in v0.1.35

type EolTagOnList struct {
	Given *registry.EolTagFilter
	Get   *registry.EolTagList
	Error error
}

type FeaturesOnGet added in v0.1.35

type FeaturesOnGet struct {
	Given *registry.GetFeaturesRequest
	Get   *registry.GetFeaturesResponse
	Error error
}

type HelmOnGet added in v0.1.35

type HelmOnGet struct {
	Given *registry.HelmRequest
	Get   *registry.Helm
	Error error
}

type ImageConfigOnGet added in v0.1.20

type ImageConfigOnGet struct {
	Given *registry.ImageConfigRequest
	Get   *registry.ImageConfig
	Error error
}

type ManifestMetadataOnList added in v0.1.20

type ManifestMetadataOnList struct {
	Given *registry.ManifestMetadataFilter
	List  *registry.ManifestMetadataList
	Error error
}

type MockApkoClient added in v0.1.29

type MockApkoClient struct {
	registry.ApkoClient

	OnResolveConfig []OnResolveConfig
	OnBuildImage    []OnBuildImage
}
Example

ExampleMockApkoClient demonstrates mocking Apko operations.

package main

import (
	"context"
	"fmt"

	registry "chainguard.dev/sdk/proto/platform/registry/v1"
	"chainguard.dev/sdk/proto/platform/registry/v1/test"
)

func main() {
	mock := test.MockApkoClient{
		OnBuildImage: []test.OnBuildImage{{
			Given:  &registry.BuildImageRequest{},
			Result: &registry.BuildImageResponse{},
		}},
	}

	result, err := mock.BuildImage(context.Background(), &registry.BuildImageRequest{})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}

	fmt.Printf("Build image result: %v\n", result != nil)

}
Output:
Build image result: true

func (MockApkoClient) BuildImage added in v0.1.29

func (MockApkoClient) ResolveConfig added in v0.1.29

type MockEntitlementsClient added in v0.1.33

type MockEntitlementsClient struct {
	registry.EntitlementsClient

	OnListEntitlements             []EntitlementsOnList
	OnListEntitlementImages        []EntitlementImagesOnList
	OnListEntitlementCatalogImages []EntitlementCatalogImagesOnList
	OnGetEntitlementSummary        []EntitlementSummaryOnGet
	OnGetFeatures                  []FeaturesOnGet
}

func (*MockEntitlementsClient) GetFeatures added in v0.1.35

func (*MockEntitlementsClient) ListEntitlementCatalogImages added in v0.1.38

func (*MockEntitlementsClient) ListEntitlementImages added in v0.1.33

func (*MockEntitlementsClient) ListEntitlements added in v0.1.33

func (*MockEntitlementsClient) Summary added in v0.1.33

type MockRegistryClient

type MockRegistryClient struct {
	registry.RegistryClient

	OnCreateRepos               []ReposOnCreate
	OnDeleteRepos               []ReposOnDelete
	OnListRepos                 []ReposOnList
	OnListEolTags               []EolTagOnList
	OnCreateTags                []TagsOnCreate
	OnDeleteTags                []TagsOnDelete
	OnUpdateTag                 []TagOnUpdate
	OnListTags                  []TagsOnList
	OnUpdateRepo                []RepoOnUpdate
	OnListTagHistory            []TagHistoryOnList
	OnGetImageConfig            []ImageConfigOnGet
	OnGetSbom                   []SbomOnGet
	OnGetVulnReport             []VulnReportOnGet
	OnListManifestMetadata      []ManifestMetadataOnList
	OnGetRawSbom                []RawSbomOnGet
	OnGetPackageVersionMetadata []PackageVersionMetadataOnGet
	OnListBuildReports          []BuildReportsOnList
	OnGetBuildStatus            []BuildStatusOnGet
	OnGetUpdateStatus           []UpdateStatusOnGet
	OnGetRepoCountBySource      []RepoCountBySourceOnGet
	OnGetArchs                  []ArchsOnGet
	OnGetSize                   []SizeOnGet
	OnGetHelm                   []HelmOnGet
	OnGetChart                  []ChartOnGet
	OnGetRegistrySettings       []RegistrySettingsOnGet
	OnGetSyncStatus             []SyncStatusOnGet
	OnListSyncStatuses          []SyncStatusOnList
}

func (MockRegistryClient) CreateRepo

func (MockRegistryClient) CreateTag

func (MockRegistryClient) DeleteRepo

func (MockRegistryClient) DeleteTag

func (MockRegistryClient) GetArchs added in v0.1.33

func (MockRegistryClient) GetBuildStatus added in v0.1.33

func (MockRegistryClient) GetChart added in v0.1.46

func (MockRegistryClient) GetHelm added in v0.1.35

func (MockRegistryClient) GetImageConfig added in v0.1.20

func (MockRegistryClient) GetPackageVersionMetadata added in v0.1.25

func (MockRegistryClient) GetRawSbom added in v0.1.21

func (MockRegistryClient) GetRegistrySettings added in v0.1.45

func (MockRegistryClient) GetRepoCountBySource added in v0.1.33

func (MockRegistryClient) GetSbom added in v0.1.8

func (MockRegistryClient) GetSize added in v0.1.33

func (MockRegistryClient) GetSyncStatus added in v0.1.46

func (MockRegistryClient) GetUpdateStatus added in v0.1.33

func (MockRegistryClient) GetVulnReport added in v0.1.12

func (MockRegistryClient) ListBuildReports added in v0.1.29

func (MockRegistryClient) ListEolTags added in v0.1.35

func (MockRegistryClient) ListManifestMetadata added in v0.1.20

func (MockRegistryClient) ListRepos

func (MockRegistryClient) ListSyncStatuses added in v0.1.51

func (MockRegistryClient) ListTagHistory

func (MockRegistryClient) ListTags

func (MockRegistryClient) UpdateRepo

func (m MockRegistryClient) UpdateRepo(_ context.Context, given *registry.Repo, _ ...grpc.CallOption) (*registry.Repo, error)

func (MockRegistryClient) UpdateTag

func (m MockRegistryClient) UpdateTag(_ context.Context, given *registry.Tag, _ ...grpc.CallOption) (*registry.Tag, error)

type MockRegistryClients

type MockRegistryClients struct {
	OnClose error

	RegistryClient        MockRegistryClient
	VulnerabilitiesClient MockVulnerabilitiesClient
	ApkoClient            MockApkoClient
	EntitlementsClient    MockEntitlementsClient
}
Example

ExampleMockRegistryClients demonstrates creating a complete mock registry client.

package main

import (
	"context"
	"fmt"

	registry "chainguard.dev/sdk/proto/platform/registry/v1"
	"chainguard.dev/sdk/proto/platform/registry/v1/test"
)

func main() {
	// Create a mock registry client with configured responses.
	mock := &test.MockRegistryClients{
		RegistryClient: test.MockRegistryClient{
			OnListRepos: []test.ReposOnList{{
				Given: &registry.RepoFilter{},
				List: &registry.RepoList{
					Items: []*registry.Repo{{
						Id:   "repo-123",
						Name: "test-repo",
					}},
				},
			}},
		},
	}

	// Use the mock client.
	repos, err := mock.Registry().ListRepos(context.Background(), &registry.RepoFilter{})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}

	fmt.Printf("Found %d repos\n", len(repos.Items))
	fmt.Printf("First repo: %s\n", repos.Items[0].Name)

}
Output:
Found 1 repos
First repo: test-repo
Example (Close)

ExampleMockRegistryClients_close demonstrates handling the Close method.

package main

import (
	"fmt"

	"chainguard.dev/sdk/proto/platform/registry/v1/test"
)

func main() {
	mock := &test.MockRegistryClients{
		OnClose: nil,
	}

	err := mock.Close()
	if err != nil {
		fmt.Printf("Close error: %v\n", err)
		return
	}

	fmt.Println("Client closed successfully")

}
Output:
Client closed successfully

func (MockRegistryClients) Apko added in v0.1.29

func (MockRegistryClients) Close

func (m MockRegistryClients) Close() error

func (MockRegistryClients) Entitlements added in v0.1.33

func (MockRegistryClients) Registry

func (MockRegistryClients) Vulnerabilities added in v0.1.27

type MockVulnerabilitiesClient added in v0.1.27

type MockVulnerabilitiesClient struct {
	registry.VulnerabilitiesClient

	OnListVulnReports                []VulnReportsOnList
	OnGetRawVulnReport               []RawVulnReportOnGet
	OnListVulnCountReports           []VulnCountReportsOnList
	OnListCumulativeVulnCountReports []VulnCountReportsOnList
}
Example

ExampleMockVulnerabilitiesClient demonstrates mocking vulnerability operations.

package main

import (
	"context"
	"fmt"

	registry "chainguard.dev/sdk/proto/platform/registry/v1"
	"chainguard.dev/sdk/proto/platform/registry/v1/test"
)

func main() {
	mock := test.MockVulnerabilitiesClient{
		OnListVulnReports: []test.VulnReportsOnList{{
			Given: &registry.VulnReportFilter{},
			List:  &registry.VulnReportList{},
		}},
	}

	list, err := mock.ListVulnReports(context.Background(), &registry.VulnReportFilter{})
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}

	fmt.Printf("Vuln reports listed: %v\n", list != nil)

}
Output:
Vuln reports listed: true

func (MockVulnerabilitiesClient) GetRawVulnReport added in v0.1.27

func (MockVulnerabilitiesClient) ListCumulativeVulnCountReports added in v0.1.32

func (MockVulnerabilitiesClient) ListVulnCountReports added in v0.1.27

func (MockVulnerabilitiesClient) ListVulnReports added in v0.1.27

type OnBuildImage added in v0.1.29

type OnBuildImage struct {
	Given  *registry.BuildImageRequest
	Result *registry.BuildImageResponse
	Error  error
}

type OnResolveConfig added in v0.1.29

type OnResolveConfig struct {
	Given  *registry.ResolveConfigRequest
	Result *registry.ApkoConfig
	Error  error
}

type PackageVersionMetadataOnGet added in v0.1.25

type PackageVersionMetadataOnGet struct {
	Given *registry.PackageVersionMetadataRequest
	Get   *registry.PackageVersionMetadata
	Error error
}

type RawSbomOnGet added in v0.1.21

type RawSbomOnGet struct {
	Given *registry.RawSbomRequest //nolint:staticcheck
	Get   *registry.RawSbom        //nolint:staticcheck
	Error error
}

type RawVulnReportOnGet added in v0.1.27

type RawVulnReportOnGet struct {
	Given *registry.GetRawVulnReportRequest
	Get   *registry.RawVulnReport
	Error error
}

type RegistrySettingsOnGet added in v0.1.45

type RegistrySettingsOnGet struct {
	Given *registry.GetRegistrySettingsRequest
	Get   *registry.RegistrySettings
	Error error
}

type RepoCountBySourceOnGet added in v0.1.33

type RepoCountBySourceOnGet struct {
	Given *registry.GetRepoCountBySourceRequest
	Get   *registry.RepoCount
	Error error
}

type RepoOnUpdate

type RepoOnUpdate struct {
	Given   *registry.Repo
	Updated *registry.Repo
	Error   error
}

type ReposOnCreate

type ReposOnCreate struct {
	Given   *registry.CreateRepoRequest
	Created *registry.Repo
	Error   error
}

type ReposOnDelete

type ReposOnDelete struct {
	Given *registry.DeleteRepoRequest
	Error error
}

type ReposOnList

type ReposOnList struct {
	Given *registry.RepoFilter
	List  *registry.RepoList
	Error error
}

type SbomOnGet added in v0.1.8

type SbomOnGet struct {
	Given *registry.SbomRequest //nolint:staticcheck
	Get   *tenant.Sbom2
	Error error
}

type SizeOnGet added in v0.1.33

type SizeOnGet struct {
	Given *registry.SizeRequest
	Get   *registry.Size
	Error error
}

type SyncStatusOnGet added in v0.1.46

type SyncStatusOnGet struct {
	Given *registry.GetSyncStatusRequest
	Get   *registry.SyncStatus
	Error error
}

type SyncStatusOnList added in v0.1.51

type SyncStatusOnList struct {
	Given *registry.ListSyncStatusesRequest
	Get   *registry.SyncStatusList
	Error error
}

type TagHistoryOnList

type TagHistoryOnList struct {
	Given *registry.TagHistoryFilter
	List  *registry.TagHistoryList
	Error error
}

type TagOnUpdate

type TagOnUpdate struct {
	Given   *registry.Tag
	Updated *registry.Tag
	Error   error
}

type TagsOnCreate

type TagsOnCreate struct {
	Given   *registry.CreateTagRequest
	Created *registry.Tag
	Error   error
}

type TagsOnDelete

type TagsOnDelete struct {
	Given *registry.DeleteTagRequest
	Error error
}

type TagsOnList

type TagsOnList struct {
	Given *registry.TagFilter
	List  *registry.TagList
	Error error
}

type UpdateStatusOnGet added in v0.1.33

type UpdateStatusOnGet struct {
	Given *registry.UpdateStatusRequest
	Get   *registry.UpdateStatus
	Error error
}

type VulnCountReportsOnList added in v0.1.27

type VulnCountReportsOnList struct {
	Given *registry.VulnCountReportFilter
	List  *registry.VulnCountReportList
	Error error
}

type VulnReportOnGet added in v0.1.12

type VulnReportOnGet struct {
	Given *registry.VulnReportRequest
	Get   *tenant.VulnReport
	Error error
}

type VulnReportsOnList added in v0.1.27

type VulnReportsOnList struct {
	Given *registry.VulnReportFilter
	List  *registry.VulnReportList
	Error error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL