From a267905d3420f7279ea4c221646448073bec9b5a Mon Sep 17 00:00:00 2001 From: Nick Santos Date: Wed, 3 Mar 2021 13:26:15 -0500 Subject: [PATCH] server: use unbuffered memory connections for testing, which seem to be more robust (#4266) --- go.mod | 2 +- go.sum | 4 +- internal/engine/upper_test.go | 3 +- internal/hud/server/apiserver.go | 6 +-- internal/hud/server/apiserver_test.go | 21 +++++++++-- .../pkg/server/apiserver/apiserver.go | 9 ----- .../pkg/server/apiserver/conn.go | 37 +++++++++++++++++++ .../tilt-apiserver/pkg/server/start/start.go | 4 +- vendor/modules.txt | 2 +- 9 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/conn.go diff --git a/go.mod b/go.mod index 945730284d..e7f6df354e 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( github.com/tilt-dev/go-get v0.0.0-20200911222649-1acd29546527 github.com/tilt-dev/localregistry-go v0.0.0-20200615231835-07e386f4ebd7 github.com/tilt-dev/probe v0.2.0 - github.com/tilt-dev/tilt-apiserver v0.2.1 + github.com/tilt-dev/tilt-apiserver v0.2.2 github.com/tilt-dev/wmclient v0.0.0-20201109174454-1839d0355fbc github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea github.com/whilp/git-urls v0.0.0-20160530060445-31bac0d230fa diff --git a/go.sum b/go.sum index ce04d2af7a..666faf6244 100644 --- a/go.sum +++ b/go.sum @@ -1237,8 +1237,8 @@ github.com/tilt-dev/opencensus-go v0.22.5-0.20200904175236-275b1754f353 h1:lxM1v github.com/tilt-dev/opencensus-go v0.22.5-0.20200904175236-275b1754f353/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= github.com/tilt-dev/probe v0.2.0 h1:2kLs+xNjv6OYoR7OLCQELV6+/Ce0gqOC856qKfN/TB4= github.com/tilt-dev/probe v0.2.0/go.mod h1:N4FSqESyYQuc9GwIaIoHS5cIUDznIUwDkG6y4kQVXQY= -github.com/tilt-dev/tilt-apiserver v0.2.1 h1:mt5XZ0g4TYiOB8jtMIsBFwBlOl7MgGZqzsP5maJBdz8= -github.com/tilt-dev/tilt-apiserver v0.2.1/go.mod h1:5JegGavWDV+CrTD1w9QWFekMQwctZmbkQumHd4aqsT8= +github.com/tilt-dev/tilt-apiserver v0.2.2 h1:ZzMjWH/oZCpqc294/SocHMm872n9BLZETBAEze8Kz1g= +github.com/tilt-dev/tilt-apiserver v0.2.2/go.mod h1:5JegGavWDV+CrTD1w9QWFekMQwctZmbkQumHd4aqsT8= github.com/tilt-dev/wmclient v0.0.0-20201109174454-1839d0355fbc h1:wGkAoZhrvnmq93B4W2v+agiPl7xzqUaxXkxmKrwJ6bc= github.com/tilt-dev/wmclient v0.0.0-20201109174454-1839d0355fbc/go.mod h1:n01fG3LbImzxBP3GGCTHkgXuPeJusWg6xv0QYGm9HtE= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= diff --git a/internal/engine/upper_test.go b/internal/engine/upper_test.go index efc352f1c1..2b65a15945 100644 --- a/internal/engine/upper_test.go +++ b/internal/engine/upper_test.go @@ -17,7 +17,6 @@ import ( "testing" "time" - "github.com/akutz/memconn" "github.com/docker/distribution/reference" dockertypes "github.com/docker/docker/api/types" "github.com/google/uuid" @@ -3764,7 +3763,7 @@ func newTestFixture(t *testing.T) *testFixture { dcw := dcwatch.NewEventWatcher(fakeDcc, dockerClient) dclm := runtimelog.NewDockerComposeLogManager(fakeDcc) pm := NewProfilerManager() - serverOptions, err := server.ProvideTiltServerOptions(ctx, "localhost", 0, model.TiltBuild{}, &memconn.Provider{}) + serverOptions, err := server.ProvideTiltServerOptions(ctx, "localhost", 0, model.TiltBuild{}, server.ProvideMemConn()) require.NoError(t, err) hudsc := server.ProvideHeadsUpServerController(0, serverOptions, &server.HeadsUpServer{}, assets.NewFakeServer(), model.WebURL{}) ewm := k8swatch.NewEventWatchManager(kCli, of, ns) diff --git a/internal/hud/server/apiserver.go b/internal/hud/server/apiserver.go index 84ce663694..7f0b3d9504 100644 --- a/internal/hud/server/apiserver.go +++ b/internal/hud/server/apiserver.go @@ -24,12 +24,12 @@ type APIServerConfig = apiserver.Config type DynamicInterface = dynamic.Interface type Interface = tiltapi.Interface -func ProvideMemConn() *memconn.Provider { - return &memconn.Provider{} +func ProvideMemConn() apiserver.ConnProvider { + return apiserver.NetworkConnProvider(&memconn.Provider{}, "memu") } // Configures the Tilt API server. -func ProvideTiltServerOptions(ctx context.Context, host model.WebHost, port model.WebPort, tiltBuild model.TiltBuild, memconn *memconn.Provider) (*APIServerConfig, error) { +func ProvideTiltServerOptions(ctx context.Context, host model.WebHost, port model.WebPort, tiltBuild model.TiltBuild, memconn apiserver.ConnProvider) (*APIServerConfig, error) { w := logger.Get(ctx).Writer(logger.DebugLvl) builder := builder.NewServerBuilder(). WithOutputWriter(w) diff --git a/internal/hud/server/apiserver_test.go b/internal/hud/server/apiserver_test.go index 75842b4d39..9b002153c8 100644 --- a/internal/hud/server/apiserver_test.go +++ b/internal/hud/server/apiserver_test.go @@ -7,12 +7,12 @@ import ( "strings" "testing" - "github.com/akutz/memconn" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/watch" "github.com/tilt-dev/tilt-apiserver/pkg/server/builder/resource" @@ -26,7 +26,7 @@ import ( // Ensure creating objects works with the dynamic API clients. func TestAPIServer(t *testing.T) { ctx, _, _ := testutils.CtxAndAnalyticsForTest() - memconn := &memconn.Provider{} + memconn := ProvideMemConn() cfg, err := ProvideTiltServerOptions(ctx, "localhost", 0, model.TiltBuild{}, memconn) require.NoError(t, err) @@ -76,12 +76,13 @@ type typedTestCase struct { Name string Create func(ctx context.Context, name string, annotations map[string]string) error Get func(ctx context.Context, name string) (resource.Object, error) + Watch func(ctx context.Context) (watch.Interface, error) } // Ensure creating objects works with the typed API clients. func TestAPIServerTypedClient(t *testing.T) { ctx, _, _ := testutils.CtxAndAnalyticsForTest() - memconn := &memconn.Provider{} + memconn := ProvideMemConn() cfg, err := ProvideTiltServerOptions(ctx, "localhost", 0, model.TiltBuild{}, memconn) require.NoError(t, err) @@ -108,13 +109,20 @@ func TestAPIServerTypedClient(t *testing.T) { Get: func(ctx context.Context, name string) (resource.Object, error) { return clientset.CoreV1alpha1().FileWatches().Get(ctx, name, metav1.GetOptions{}) }, + Watch: func(ctx context.Context) (watch.Interface, error) { + return clientset.CoreV1alpha1().FileWatches().Watch(ctx, metav1.ListOptions{}) + }, }, } for _, testCase := range testCases { t.Run(testCase.Name, func(t *testing.T) { objName := fmt.Sprintf("typed-%s", strings.ToLower(testCase.Name)) - err := testCase.Create(ctx, objName, map[string]string{ + watcher, err := testCase.Watch(ctx) + require.NoError(t, err) + defer watcher.Stop() + + err = testCase.Create(ctx, objName, map[string]string{ "my-random-key": "my-random-value", }) require.NoError(t, err) @@ -127,6 +135,11 @@ func TestAPIServerTypedClient(t *testing.T) { assert.Equal(t, objName, metadata.GetName()) assert.Equal(t, "my-random-value", metadata.GetAnnotations()["my-random-key"]) + + watchEvent := <-watcher.ResultChan() + watchedMetadata, err := meta.Accessor(watchEvent.Object) + require.NoError(t, err) + assert.Equal(t, objName, watchedMetadata.GetName()) }) } } diff --git a/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/apiserver.go b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/apiserver.go index 8d8a302a24..c0a9e0dc42 100644 --- a/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/apiserver.go +++ b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/apiserver.go @@ -17,9 +17,6 @@ limitations under the License. package apiserver import ( - "context" - "net" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -29,12 +26,6 @@ import ( genericapiserver "k8s.io/apiserver/pkg/server" ) -type ConnProvider interface { - Dial(network, address string) (net.Conn, error) - DialContext(ctx context.Context, network, address string) (net.Conn, error) - Listen(network, address string) (net.Listener, error) -} - func NewScheme() *runtime.Scheme { scheme := runtime.NewScheme() diff --git a/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/conn.go b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/conn.go new file mode 100644 index 0000000000..d63746065e --- /dev/null +++ b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver/conn.go @@ -0,0 +1,37 @@ +package apiserver + +import ( + "context" + "net" +) + +type ConnProvider interface { + Dial(network, address string) (net.Conn, error) + DialContext(ctx context.Context, network, address string) (net.Conn, error) + Listen(network, address string) (net.Listener, error) +} + +// Creates a ConnProvider where all connections are redirected over a particular +// network. Useful for use with memconn, which uses "memb" and "memu" +// as in-memory networks. +func NetworkConnProvider(p ConnProvider, network string) ConnProvider { + return networkConnProvider{ + delegate: p, + network: network, + } +} + +type networkConnProvider struct { + delegate ConnProvider + network string +} + +func (p networkConnProvider) Dial(network, address string) (net.Conn, error) { + return p.delegate.Dial(p.network, address) +} +func (p networkConnProvider) DialContext(ctx context.Context, network, address string) (net.Conn, error) { + return p.delegate.DialContext(ctx, p.network, address) +} +func (p networkConnProvider) Listen(network, address string) (net.Listener, error) { + return p.delegate.Listen(p.network, address) +} diff --git a/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/start/start.go b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/start/start.go index 828260817f..8571fc7644 100644 --- a/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/start/start.go +++ b/vendor/github.com/tilt-dev/tilt-apiserver/pkg/server/start/start.go @@ -139,7 +139,7 @@ func (o *TiltServerOptions) Config() (*apiserver.Config, error) { o.ServingOptions.BindPort = 80 // Create a fake port. } - l, err := o.ConnProvider.Listen("memb", fmt.Sprintf("%s:%d", o.ServingOptions.BindAddress, o.ServingOptions.BindPort)) + l, err := o.ConnProvider.Listen("tcp", fmt.Sprintf("%s:%d", o.ServingOptions.BindAddress, o.ServingOptions.BindPort)) if err != nil { return nil, err } @@ -179,7 +179,7 @@ func (o TiltServerOptions) LoopbackClientConfig() *rest.Config { } if o.ConnProvider != nil { result.Dial = func(ctx context.Context, network, address string) (net.Conn, error) { - return o.ConnProvider.DialContext(ctx, "memb", address) + return o.ConnProvider.DialContext(ctx, network, address) } } return result diff --git a/vendor/modules.txt b/vendor/modules.txt index b8773b1a77..a970f3fbb9 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -518,7 +518,7 @@ github.com/tilt-dev/localregistry-go ## explicit github.com/tilt-dev/probe/pkg/probe github.com/tilt-dev/probe/pkg/prober -# github.com/tilt-dev/tilt-apiserver v0.2.1 +# github.com/tilt-dev/tilt-apiserver v0.2.2 ## explicit github.com/tilt-dev/tilt-apiserver/pkg/server/apiserver github.com/tilt-dev/tilt-apiserver/pkg/server/builder