func resourceLocationHelper(BuildPhase api.BuildPhase, podPhase string, ctx kapi.Context) (string, error) { expectedBuild := mockBuild(BuildPhase, podPhase) internal := &test.BuildStorage{Build: expectedBuild} storage := &REST{ Getter: internal, PodGetter: &testPodGetter{}, ConnectionInfo: &kclient.HTTPKubeletClient{Config: &kclient.KubeletConfig{EnableHttps: true, Port: 12345}, Client: &http.Client{}}, Timeout: defaultTimeout, } getter := rest.GetterWithOptions(storage) obj, err := getter.Get(ctx, "foo-build", &api.BuildLogOptions{NoWait: true}) if err != nil { return "", err } streamer, ok := obj.(*genericrest.LocationStreamer) if !ok { return "", fmt.Errorf("Result of get not LocationStreamer") } if streamer.Location != nil { return streamer.Location.String(), nil } return "", nil }
func TestPreviousBuildLogs(t *testing.T) { ctx := kapi.NewDefaultContext() first := mockBuild(api.BuildPhaseComplete, "bc-1", 1) second := mockBuild(api.BuildPhaseComplete, "bc-2", 2) third := mockBuild(api.BuildPhaseComplete, "bc-3", 3) internal := &test.BuildStorage{Builds: &api.BuildList{Items: []api.Build{*first, *second, *third}}} storage := &REST{ Getter: internal, PodGetter: &anotherTestPodGetter{}, ConnectionInfo: &fakeConnectionInfoGetter{}, Timeout: defaultTimeout, } getter := rest.GetterWithOptions(storage) // Will expect the previous from bc-3 aka bc-2 obj, err := getter.Get(ctx, "bc-3", &api.BuildLogOptions{NoWait: true, Previous: true}) if err != nil { t.Fatalf("unexpected error: %v", err) } streamer, ok := obj.(*genericrest.LocationStreamer) if !ok { t.Fatalf("unexpected object: %#v", obj) } expected := &url.URL{ Scheme: "https", Host: "foo-host:12345", Path: "/containerLogs/default/bc-2-build/foo-container", } if exp, got := expected.String(), streamer.Location.String(); exp != got { t.Fatalf("expected location:\n\t%s\ngot location:\n\t%s\n", exp, got) } }
func resourceLocationHelper(BuildPhase api.BuildPhase, podPhase string, ctx kapi.Context, version int) (string, error) { expectedBuild := mockBuild(BuildPhase, podPhase, version) internal := &test.BuildStorage{Build: expectedBuild} storage := &REST{ Getter: internal, PodGetter: &testPodGetter{}, ConnectionInfo: &fakeConnectionInfoGetter{}, Timeout: defaultTimeout, } getter := rest.GetterWithOptions(storage) obj, err := getter.Get(ctx, "foo-build", &api.BuildLogOptions{NoWait: true}) if err != nil { return "", err } streamer, ok := obj.(*genericrest.LocationStreamer) if !ok { return "", fmt.Errorf("Result of get not LocationStreamer") } if streamer.Location != nil { return streamer.Location.String(), nil } return "", nil }
return &api.Pod{} } // Update alters the status subset of an object. func (r *StatusREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) { return r.store.Update(ctx, obj) } // LogREST implements the log endpoint for a Pod type LogREST struct { store *etcdgeneric.Etcd kubeletConn client.ConnectionInfoGetter } // LogREST implements GetterWithOptions var _ = rest.GetterWithOptions(&LogREST{}) // New creates a new Pod log options object func (r *LogREST) New() runtime.Object { // TODO - return a resource that represents a log return &api.Pod{} } // Get retrieves a runtime.Object that will stream the contents of the pod log func (r *LogREST) Get(ctx api.Context, name string, opts runtime.Object) (runtime.Object, error) { logOpts, ok := opts.(*api.PodLogOptions) if !ok { return nil, fmt.Errorf("Invalid options object: %#v", opts) } location, transport, err := pod.LogLocation(r.store, r.kubeletConn, ctx, name, logOpts) if err != nil {