package bannerctl import ( "testing" "time" "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime" bsltypes "edge-infra.dev/pkg/edge/api/bsl/types" bannerAPI "edge-infra.dev/pkg/edge/apis/banner/v1alpha1" edgeconstants "edge-infra.dev/pkg/edge/constants" "edge-infra.dev/pkg/edge/shipment/generator" "edge-infra.dev/pkg/f8n/warehouse/cluster" whv1 "edge-infra.dev/pkg/f8n/warehouse/k8s/apis/v1alpha1" ) const ( domain = "dev0.edge-preprod.dev" bannerNameUUID = "my-banner-uuid" projectID = "project-id" foremanProjectID = "foreman-project-id" bslEUID = "bsl-project-id" shipmentName = "bannerctl-infra" datasyncDNSName = "datasync-preprod.dev" datasyncDNSZone = "datasync-preprod" databaseName = "postgres" gcpRegion = "us-east1" gcpZone = "c" gcpForemanProjectNumber = "1045316320451" ) var ( bslConfig = bsltypes.BSPConfig{ OrganizationPrefix: "edge-test1", Endpoint: "https://api.ncr.com", Root: "/customers", } ) func TestShipment(t *testing.T) { r := &BannerReconciler{ Log: ctrl.Log.WithName("bannerctl"), ForemanProjectID: foremanProjectID, PlatInfraProjectID: "platform-id", Name: "bannerctl", Domain: domain, DatasyncDNSName: datasyncDNSName, DatasyncDNSZone: datasyncDNSZone, DatabaseName: databaseName, GCPRegion: gcpRegion, GCPZone: gcpZone, GCPForemanProjectNumber: gcpForemanProjectNumber, BSLConfig: bslConfig, EdgeSecOptInCompliance: true, EdgeSecMaxLeasePeriod: "48h", EdgeSecMaxValidityPeriod: "60d", } b := &bannerAPI.Banner{ ObjectMeta: metav1.ObjectMeta{ Name: bannerNameUUID, }, Spec: bannerAPI.BannerSpec{ GCP: bannerAPI.GCPConfig{ ProjectID: projectID, }, BSL: bannerAPI.BSLConfig{ EnterpriseUnit: bannerAPI.BSLEnterpriseUnit{ ID: bslEUID, }, }, }, } objs, err := r.generateShipments(b) assert.NoError(t, err) assert.Equal(t, 1, len(objs)) assert.Equal(t, couchdbInfraShipment(), objs[0]) } func couchdbInfraShipment() *whv1.Shipment { return &whv1.Shipment{ TypeMeta: metav1.TypeMeta{ Kind: whv1.ShipmentGVK.Kind, APIVersion: whv1.ShipmentGVK.GroupVersion().String(), }, ObjectMeta: metav1.ObjectMeta{ Name: bannerNameUUID, }, Spec: whv1.ShipmentSpec{ UnpackOptions: whv1.UnpackOptions{ Infra: true, Runtime: false, Provider: cluster.GKE, InfraNamespace: bannerNameUUID, }, ApplyOptions: whv1.ApplyOptions{ Prune: true, Force: true, Interval: &metav1.Duration{Duration: 120 * time.Second}, RetryInterval: &metav1.Duration{Duration: 20 * time.Second}, Timeout: &metav1.Duration{Duration: 90 * time.Second}, }, PackagePullOptions: whv1.PackagePullOptions{ PackagePullPolicy: whv1.Always, }, Pallets: []whv1.BaseArtifact{{Name: "couchdb-bannerinfra", Tag: "latest"}}, Repository: generator.GenerateShipmentRepo("us-east1", foremanProjectID), Rendering: []whv1.Parameters{ { Variables: map[string]string{ "cluster_provider": string(cluster.GKE), "banner_id": bannerNameUUID, "cluster_uuid": bannerNameUUID, "gcp_region": edgeconstants.DefaultGCPRegion, "gcp_zone": edgeconstants.DefaultGCPZone, "gcp_foreman_project_number": gcpForemanProjectNumber, "gcp_project_id": projectID, "foreman_gcp_project_id": foremanProjectID, "platform_infra_gcp_project_id": "platform-id", "bsl_eu_id": bslEUID, "domain": domain, "datasync_dns_name": datasyncDNSName, "datasync_dns_zone": datasyncDNSZone, "edge_sql_db_name": databaseName, "bsl_endpoint": bslConfig.Endpoint, "bsl_edge_env_prefix": bslConfig.OrganizationPrefix, "bsl_root_org": bslConfig.Root, "edge_sec_max_lease_period": "48h", "edge_sec_max_validity_period": "60d", "edge_sec_opt_in_compliance": "true", }, }, }, }, } }