package integration import ( "context" "encoding/json" "fmt" "net/http" "net/http/httptest" "os" "testing" "gotest.tools/v3/assert" "edge-infra.dev/pkg/f8n/ipranger" "edge-infra.dev/pkg/f8n/ipranger/server" "edge-infra.dev/test/f2" "edge-infra.dev/test/f2/integration" ) var ( f f2.Framework ) func TestMain(m *testing.M) { f = f2.New( context.Background()). Priviledged("GCP Network admin"). Disruptive(). Setup(func(ctx f2.Context) (f2.Context, error) { // TODO: Any setup steps to initialize L1 resources, or connect // to L2 resources // TODO: Copied from exiting test which used old test/framework. For // an L2 test there needs to be an extension/functionality to get a // GCP project for testing against external services // gcp.NeedsProjectID(f) // // create gcp services // subnetSvc, err := newGCPSubnetService(ctx) // if err != nil { // t.Fatal(err) // } // r.subnetSvc = subnetSvc return ctx, nil }) os.Exit(f.Run(m)) } func TestIPRanger(t *testing.T) { integration.SkipIfNot(t, integration.L2) var ipr *ipranger.IPRanger var projectID string feat := f2.NewFeature("Finds or creates subnets"). Setup("IPRanger setup", func(ctx f2.Context, t *testing.T) f2.Context { ipr, err := ipranger.New(ctx) assert.NilError(t, err, "failed to create IPRanger instance") projectID = "TODO: L2 project id" initErr := ipr.InitState(projectID) assert.NilError(t, initErr, "failed to fetch subnet state from GCP") return ctx }). Test("Creates subnet", func(ctx f2.Context, t *testing.T) f2.Context { sn, err := ipr.CreateNewSubnet(projectID, "us-east1") assert.NilError(t, err, "failed to create subnet") assert.Assert(t, sn != ipranger.Subnet{}) return ctx }). Test("Finds available subnet", func(ctx f2.Context, t *testing.T) f2.Context { ok, sn := ipr.FindAvailableSubnet(projectID, "region0") assert.Assert(t, ok, "failed to find subnet with available quota") assert.Assert(t, sn != ipranger.Subnet{}) return ctx }). Feature() f.Test(t, feat) } func TestClientServerIntegration(t *testing.T) { integration.SkipIfNot(t, integration.L2) var s *server.Server var projectID string feat := f2.NewFeature("Client requests netcfg from server"). Setup("IPRanger server setup", func(ctx f2.Context, t *testing.T) f2.Context { projectID = "TODO: L2 project id" var err error opts := []server.Option{} s, err = server.NewServer(opts...) assert.NilError(t, err, "failed to create ipranger server") return ctx }). Test("Netcfg request", func(ctx f2.Context, t *testing.T) f2.Context { req, err := http.NewRequest( "GET", fmt.Sprintf("%s?project=%s®ion=us-east1-c&cluster=%s", server.NetcfgEndpoint, projectID, "test%2Fescaped+infra0", ), nil, ) assert.NilError(t, err) w := httptest.NewRecorder() s.Router.ServeHTTP(w, req) assert.Assert(t, w.Code == 200, "expected http 200, got %v. body: %v", w.Code, w.Body.String()) var netcfg server.NetcfgResp d := json.NewDecoder(w.Body) d.DisallowUnknownFields() assert.NilError(t, d.Decode(&netcfg)) assert.Assert(t, netcfg != server.NetcfgResp{}) assert.Assert(t, netcfg.Netmask != "") assert.Assert(t, netcfg.Subnetwork != "") assert.Assert(t, netcfg.Network != "") return ctx }). Feature() f.Test(t, feat) }