// RunStartBuildWebHook tries to trigger the provided webhook. It will attempt to utilize the current client // configuration if the webhook has the same URL. func (o *StartBuildOptions) RunStartBuildWebHook() error { repo := o.Git hook, err := url.Parse(o.FromWebhook) if err != nil { return err } event, err := hookEventFromPostReceive(repo, o.GitRepository, o.GitPostReceive) if err != nil { return err } // TODO: should be a versioned struct var data []byte if event != nil { data, err = json.Marshal(event) if err != nil { return err } } httpClient := http.DefaultClient // when using HTTPS, try to reuse the local config transport if possible to get a client cert // TODO: search all configs if hook.Scheme == "https" { config, err := o.ClientConfig.ClientConfig() if err == nil { if url, _, err := restclient.DefaultServerURL(config.Host, "", unversioned.GroupVersion{}, true); err == nil { if netutil.CanonicalAddr(url) == netutil.CanonicalAddr(hook) && url.Scheme == hook.Scheme { if rt, err := restclient.TransportFor(config); err == nil { httpClient = &http.Client{Transport: rt} } } } } } glog.V(4).Infof("Triggering hook %s\n%s", hook, string(data)) resp, err := httpClient.Post(hook.String(), "application/json", bytes.NewBuffer(data)) if err != nil { return err } defer resp.Body.Close() switch { case resp.StatusCode == 301 || resp.StatusCode == 302: // TODO: follow redirect and display output case resp.StatusCode < 200 || resp.StatusCode >= 300: body, _ := ioutil.ReadAll(resp.Body) return fmt.Errorf("server rejected our request %d\nremote: %s", resp.StatusCode, string(body)) } return nil }
func TestSetsCodec(t *testing.T) { testCases := map[string]struct { Err bool Prefix string NegotiatedSerializer runtime.NegotiatedSerializer }{ registered.GroupOrDie(api.GroupName).GroupVersion.Version: { Err: false, Prefix: "/api/" + registered.GroupOrDie(api.GroupName).GroupVersion.Version, NegotiatedSerializer: testapi.Default.NegotiatedSerializer(), }, // Add this test back when we fixed config and SetKubernetesDefaults // "invalidVersion": {true, "", nil}, } for version, expected := range testCases { conf := &restclient.Config{ Host: "127.0.0.1", ContentConfig: restclient.ContentConfig{ GroupVersion: &unversioned.GroupVersion{Version: version}, }, } var versionedPath string err := SetKubernetesDefaults(conf) if err == nil { _, versionedPath, err = restclient.DefaultServerURL(conf.Host, conf.APIPath, *conf.GroupVersion, false) } switch { case err == nil && expected.Err: t.Errorf("expected error but was nil") continue case err != nil && !expected.Err: t.Errorf("unexpected error %v", err) continue case err != nil: continue } if e, a := expected.Prefix, versionedPath; e != a { t.Errorf("expected %#v, got %#v", e, a) } if e, a := expected.NegotiatedSerializer, conf.NegotiatedSerializer; !reflect.DeepEqual(e, a) { t.Errorf("expected %#v, got %#v", e, a) } } }