...

Source file src/edge-infra.dev/pkg/edge/controllers/bannerctl/shipment_test.go

Documentation: edge-infra.dev/pkg/edge/controllers/bannerctl

     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