123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package main
- import (
- "fmt"
- "io/ioutil"
- "net/http"
- "os"
- "os/exec"
- "path/filepath"
- "github.com/go-check/check"
- )
- const v2binary = "registry-v2"
- type testRegistryV2 struct {
- cmd *exec.Cmd
- dir string
- }
- func newTestRegistryV2(c *check.C) (*testRegistryV2, error) {
- template := `version: 0.1
- loglevel: debug
- storage:
- filesystem:
- rootdirectory: %s
- http:
- addr: %s`
- tmp, err := ioutil.TempDir("", "registry-test-")
- if err != nil {
- return nil, err
- }
- confPath := filepath.Join(tmp, "config.yaml")
- config, err := os.Create(confPath)
- if err != nil {
- return nil, err
- }
- if _, err := fmt.Fprintf(config, template, tmp, privateRegistryURL); err != nil {
- os.RemoveAll(tmp)
- return nil, err
- }
- cmd := exec.Command(v2binary, confPath)
- if err := cmd.Start(); err != nil {
- os.RemoveAll(tmp)
- if os.IsNotExist(err) {
- c.Skip(err.Error())
- }
- return nil, err
- }
- return &testRegistryV2{
- cmd: cmd,
- dir: tmp,
- }, nil
- }
- func (t *testRegistryV2) Ping() error {
- // We always ping through HTTP for our test registry.
- resp, err := http.Get(fmt.Sprintf("http://%s/v2/", privateRegistryURL))
- if err != nil {
- return err
- }
- if resp.StatusCode != 200 {
- return fmt.Errorf("registry ping replied with an unexpected status code %d", resp.StatusCode)
- }
- return nil
- }
- func (r *testRegistryV2) Close() {
- r.cmd.Process.Kill()
- os.RemoveAll(r.dir)
- }
|