1 package bannerctl
2
3 import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/assert"
8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9 ctrl "sigs.k8s.io/controller-runtime"
10
11 bsltypes "edge-infra.dev/pkg/edge/api/bsl/types"
12 bannerAPI "edge-infra.dev/pkg/edge/apis/banner/v1alpha1"
13 edgeconstants "edge-infra.dev/pkg/edge/constants"
14 "edge-infra.dev/pkg/edge/shipment/generator"
15 "edge-infra.dev/pkg/f8n/warehouse/cluster"
16 whv1 "edge-infra.dev/pkg/f8n/warehouse/k8s/apis/v1alpha1"
17 )
18
19 const (
20 domain = "dev0.edge-preprod.dev"
21 bannerNameUUID = "my-banner-uuid"
22 projectID = "project-id"
23 foremanProjectID = "foreman-project-id"
24 bslEUID = "bsl-project-id"
25 shipmentName = "bannerctl-infra"
26 datasyncDNSName = "datasync-preprod.dev"
27 datasyncDNSZone = "datasync-preprod"
28 databaseName = "postgres"
29 gcpRegion = "us-east1"
30 gcpZone = "c"
31 gcpForemanProjectNumber = "1045316320451"
32 )
33
34 var (
35 bslConfig = bsltypes.BSPConfig{
36 OrganizationPrefix: "edge-test1",
37 Endpoint: "https://api.ncr.com",
38 Root: "/customers",
39 }
40 )
41
42 func TestShipment(t *testing.T) {
43 r := &BannerReconciler{
44 Log: ctrl.Log.WithName("bannerctl"),
45 ForemanProjectID: foremanProjectID,
46 PlatInfraProjectID: "platform-id",
47 Name: "bannerctl",
48 Domain: domain,
49 DatasyncDNSName: datasyncDNSName,
50 DatasyncDNSZone: datasyncDNSZone,
51 DatabaseName: databaseName,
52 GCPRegion: gcpRegion,
53 GCPZone: gcpZone,
54 GCPForemanProjectNumber: gcpForemanProjectNumber,
55 BSLConfig: bslConfig,
56 EdgeSecOptInCompliance: true,
57 EdgeSecMaxLeasePeriod: "48h",
58 EdgeSecMaxValidityPeriod: "60d",
59 }
60 b := &bannerAPI.Banner{
61 ObjectMeta: metav1.ObjectMeta{
62 Name: bannerNameUUID,
63 },
64 Spec: bannerAPI.BannerSpec{
65 GCP: bannerAPI.GCPConfig{
66 ProjectID: projectID,
67 },
68 BSL: bannerAPI.BSLConfig{
69 EnterpriseUnit: bannerAPI.BSLEnterpriseUnit{
70 ID: bslEUID,
71 },
72 },
73 },
74 }
75 objs, err := r.generateShipments(b)
76 assert.NoError(t, err)
77 assert.Equal(t, 1, len(objs))
78 assert.Equal(t, couchdbInfraShipment(), objs[0])
79 }
80
81 func couchdbInfraShipment() *whv1.Shipment {
82 return &whv1.Shipment{
83 TypeMeta: metav1.TypeMeta{
84 Kind: whv1.ShipmentGVK.Kind,
85 APIVersion: whv1.ShipmentGVK.GroupVersion().String(),
86 },
87 ObjectMeta: metav1.ObjectMeta{
88 Name: bannerNameUUID,
89 },
90 Spec: whv1.ShipmentSpec{
91 UnpackOptions: whv1.UnpackOptions{
92 Infra: true,
93 Runtime: false,
94 Provider: cluster.GKE,
95 InfraNamespace: bannerNameUUID,
96 },
97 ApplyOptions: whv1.ApplyOptions{
98 Prune: true,
99 Force: true,
100 Interval: &metav1.Duration{Duration: 120 * time.Second},
101 RetryInterval: &metav1.Duration{Duration: 20 * time.Second},
102 Timeout: &metav1.Duration{Duration: 90 * time.Second},
103 },
104 PackagePullOptions: whv1.PackagePullOptions{
105 PackagePullPolicy: whv1.Always,
106 },
107 Pallets: []whv1.BaseArtifact{{Name: "couchdb-bannerinfra", Tag: "latest"}},
108 Repository: generator.GenerateShipmentRepo("us-east1", foremanProjectID),
109 Rendering: []whv1.Parameters{
110 {
111 Variables: map[string]string{
112 "cluster_provider": string(cluster.GKE),
113 "banner_id": bannerNameUUID,
114 "cluster_uuid": bannerNameUUID,
115 "gcp_region": edgeconstants.DefaultGCPRegion,
116 "gcp_zone": edgeconstants.DefaultGCPZone,
117 "gcp_foreman_project_number": gcpForemanProjectNumber,
118 "gcp_project_id": projectID,
119 "foreman_gcp_project_id": foremanProjectID,
120 "platform_infra_gcp_project_id": "platform-id",
121 "bsl_eu_id": bslEUID,
122 "domain": domain,
123 "datasync_dns_name": datasyncDNSName,
124 "datasync_dns_zone": datasyncDNSZone,
125 "edge_sql_db_name": databaseName,
126 "bsl_endpoint": bslConfig.Endpoint,
127 "bsl_edge_env_prefix": bslConfig.OrganizationPrefix,
128 "bsl_root_org": bslConfig.Root,
129 "edge_sec_max_lease_period": "48h",
130 "edge_sec_max_validity_period": "60d",
131 "edge_sec_opt_in_compliance": "true",
132 },
133 },
134 },
135 },
136 }
137 }
138
View as plain text