package gcp import ( "testing" "gitea.home.hrajfrisbee.cz/kacerr/egress-proxies-operator/internal/provider" ) func testCreateRequest() provider.CreateRequest { return provider.CreateRequest{ Name: "proxy-abc123def456ghij", UID: "11111111-2222-3333-4444-555555555555", Namespace: "default", ProxyName: "eu-proxy-1", Placement: provider.Placement{ Zone: "europe-west1-b", MachineType: "e2-micro", Image: "projects/debian-cloud/global/images/family/debian-12", }, CloudInit: "#cloud-config\npackages: [squid]", Port: 3128, } } func TestBuildInsertRequest_fieldByField(t *testing.T) { t.Parallel() cfg := withDefaults(provider.GCPConfig{Project: "my-project"}) req := buildInsertRequest(cfg, testCreateRequest()) if req.Project != "my-project" || req.Zone != "europe-west1-b" { t.Errorf("project/zone = %s/%s, want my-project/europe-west1-b", req.Project, req.Zone) } inst := req.InstanceResource if inst.GetName() != "proxy-abc123def456ghij" { t.Errorf("name = %s", inst.GetName()) } if got, want := inst.GetMachineType(), "zones/europe-west1-b/machineTypes/e2-micro"; got != want { t.Errorf("machineType = %s, want %s", got, want) } if len(inst.GetDisks()) != 1 { t.Fatalf("disks = %d, want 1", len(inst.GetDisks())) } disk := inst.GetDisks()[0] if !disk.GetBoot() || !disk.GetAutoDelete() { t.Errorf("boot/autoDelete = %v/%v, want true/true", disk.GetBoot(), disk.GetAutoDelete()) } if got, want := disk.GetInitializeParams().GetSourceImage(), "projects/debian-cloud/global/images/family/debian-12"; got != want { t.Errorf("sourceImage = %s, want %s", got, want) } if disk.GetInitializeParams().GetDiskSizeGb() != 10 { t.Errorf("diskSizeGb = %d, want the 10 default", disk.GetInitializeParams().GetDiskSizeGb()) } if len(inst.GetNetworkInterfaces()) != 1 { t.Fatalf("networkInterfaces = %d, want 1", len(inst.GetNetworkInterfaces())) } nic := inst.GetNetworkInterfaces()[0] if got, want := nic.GetNetwork(), "global/networks/default"; got != want { t.Errorf("network = %s, want %s", got, want) } if len(nic.GetAccessConfigs()) != 1 { t.Fatalf("accessConfigs = %d, want 1", len(nic.GetAccessConfigs())) } ac := nic.GetAccessConfigs()[0] if ac.GetName() != "External NAT" || ac.GetType() != "ONE_TO_ONE_NAT" { t.Errorf("accessConfig = %s/%s, want External NAT/ONE_TO_ONE_NAT", ac.GetName(), ac.GetType()) } wantLabels := map[string]string{ provider.LabelManaged: provider.LabelManagedYes, provider.LabelUID: "11111111-2222-3333-4444-555555555555", } labels := inst.GetLabels() if len(labels) != len(wantLabels) { t.Errorf("labels = %v, want %v", labels, wantLabels) } for k, v := range wantLabels { if labels[k] != v { t.Errorf("label %s = %q, want %q", k, labels[k], v) } } if tags := inst.GetTags().GetItems(); len(tags) != 1 || tags[0] != "proxy-operator" { t.Errorf("tags = %v, want [proxy-operator]", tags) } items := inst.GetMetadata().GetItems() if len(items) != 1 || items[0].GetKey() != "user-data" { t.Fatalf("metadata items = %v, want one user-data entry", items) } if items[0].GetValue() != "#cloud-config\npackages: [squid]" { t.Errorf("user-data = %q, want the resolved cloud-init", items[0].GetValue()) } } func TestBuildInsertRequest_configOverrides(t *testing.T) { t.Parallel() cfg := withDefaults(provider.GCPConfig{ Project: "my-project", Network: "crawl-vpc", NetworkTag: "crawl-egress", DiskSizeGB: 42, }) req := buildInsertRequest(cfg, testCreateRequest()) inst := req.InstanceResource if got, want := inst.GetNetworkInterfaces()[0].GetNetwork(), "global/networks/crawl-vpc"; got != want { t.Errorf("network = %s, want %s", got, want) } if tags := inst.GetTags().GetItems(); len(tags) != 1 || tags[0] != "crawl-egress" { t.Errorf("tags = %v, want [crawl-egress]", tags) } if got := inst.GetDisks()[0].GetInitializeParams().GetDiskSizeGb(); got != 42 { t.Errorf("diskSizeGb = %d, want 42", got) } } func TestBuildInsertRequest_noCloudInitMeansNoMetadata(t *testing.T) { t.Parallel() req := testCreateRequest() req.CloudInit = "" built := buildInsertRequest(withDefaults(provider.GCPConfig{Project: "p"}), req) if built.InstanceResource.GetMetadata() != nil { t.Errorf("metadata = %v, want none without cloud-init", built.InstanceResource.GetMetadata()) } }