github.com/comcast/canticle@v0.0.0-20161108184242-c53cface56e8/canticles/depreader_test.go (about)

     1  package canticles
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path"
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  func TestCanticleDependencies(t *testing.T) {
    13  	dr := &DepReader{os.ExpandEnv("$GOPATH")}
    14  
    15  	// Happy path
    16  	deps, err := dr.CanticleDependencies("github.com/Comcast/Canticle")
    17  	if err != nil {
    18  		t.Errorf("Error reading valid Canticle file %s error: %s", "github.com/Comcast/Canticle", err.Error())
    19  	}
    20  	if deps == nil {
    21  		t.Errorf("ReadCanticleDependencies should never return nil deps")
    22  		return
    23  	}
    24  	if len(deps) != 1 {
    25  		t.Errorf("ReadCanticleDependencies returned unexpected number of deps %d", len(deps))
    26  	}
    27  	expected := &CanticleDependency{
    28  		Revision:   "e4a1c78f0f69fbde8bb74f5e9f4adb037a68d753",
    29  		SourcePath: "https://go.googlesource.com/tools",
    30  		Root:       "golang.org/x/tools",
    31  	}
    32  	if !reflect.DeepEqual(expected, deps[0]) {
    33  		t.Errorf("Error reading cant deps: %v != %v", expected, deps[0])
    34  	}
    35  
    36  	// Not so happy path
    37  	deps, err = dr.CanticleDependencies("github.comcast.com/viper-cog/nothere")
    38  	if err == nil {
    39  		t.Errorf("ReadCanticleDependencies returned nil error loading invalid path")
    40  	}
    41  	if len(deps) != 0 {
    42  		t.Errorf("ReadCanticleDependencies returned non zero length deps loading invalid path")
    43  	}
    44  }
    45  
    46  /*
    47  func TestReadAllDeps(t *testing.T) {
    48  	dir, err := ioutil.TempDir("", "cant-test")
    49  	if err != nil {
    50  		t.Fatalf("Could not create tmp directory with err %s", err.Error())
    51  	}
    52  	defer os.Remove(dir)
    53  
    54  	// Create our file hierarchy
    55  	paths := []string{"cubicle", "sosicle", ".fascicle"}
    56  	for _, s := range paths {
    57  		p := path.Join(dir, "src", "canttest", s)
    58  		if err := os.MkdirAll(p, 0755); err != nil {
    59  			t.Fatalf("Could not create tmp directory with err %s", err.Error())
    60  		}
    61  	}
    62  
    63  	// Add Canticle files
    64  	tragical := &Dependency{
    65  		Root:     "tragic.com/tragical",
    66  		Revision: "Oedipus",
    67  	}
    68  	cubicle := &Dependency{
    69  		Root:     "hell.com/cubicle",
    70  		Revision: "hell",
    71  	}
    72  	fascicle := &Dependency{
    73  		Root:     "elsewhere.com/fascicle",
    74  		Revision: "a seperately published work",
    75  	}
    76  	f, err := os.Create(path.Join(dir, "src", "canttest", "Canticle"))
    77  	if err != nil {
    78  		t.Fatalf("Error creating files for test %s", err.Error())
    79  	}
    80  	defer f.Close()
    81  	deps := NewDependencies()
    82  	deps.AddDependency(tragical)
    83  	err = json.NewEncoder(f).Encode(deps)
    84  	if err != nil {
    85  		t.Fatalf("Error writing files for test %s", err.Error())
    86  	}
    87  
    88  	f1, err := os.Create(path.Join(dir, "src", "canttest", "cubicle", "Canticle"))
    89  	if err != nil {
    90  		t.Fatalf("Error creating files for test %s", err.Error())
    91  	}
    92  	defer f1.Close()
    93  	deps = NewDependencies()
    94  	deps.AddDependency(cubicle)
    95  	err = json.NewEncoder(f1).Encode(deps)
    96  	if err != nil {
    97  		t.Fatalf("Error writing files for test %s", err.Error())
    98  	}
    99  
   100  	f2, err := os.Create(path.Join(dir, "src", "canttest", ".fascicle", "Canticle"))
   101  	if err != nil {
   102  		t.Fatalf("Error creating files for test %s", err.Error())
   103  	}
   104  	defer f2.Close()
   105  	deps = NewDependencies()
   106  	deps.AddDependency(fascicle)
   107  	err = json.NewEncoder(f2).Encode(deps)
   108  	if err != nil {
   109  		t.Fatalf("Error writing files for test %s", err.Error())
   110  	}
   111  
   112  	// Setup all complete, lets read all our Canticle deps
   113  	dr := &DepReader{dir}
   114  
   115  	// Happy path
   116  	result, err := dr.ReadAllCantDeps("canttest")
   117  	if err != nil {
   118  		t.Errorf("Error reading valid Canticle files %s error: %s", "canttest", err.Error())
   119  	}
   120  	if result == nil {
   121  		t.Errorf("ReadAllCantDeps should never return nil deps")
   122  		return
   123  	}
   124  	if len(result) != 2 {
   125  		t.Errorf("ReadAllCantDeps returned unexpected number of deps %d", len(result))
   126  	}
   127  }
   128  
   129  func setupTestPath(t *testing.T) (string, error) {
   130  	dir, err := ioutil.TempDir("", "cant-test")
   131  	if err != nil {
   132  		t.Fatalf("Could not create tmp directory with err %s", err.Error())
   133  		return "", err
   134  	}
   135  
   136  	// Create our file hierarchy
   137  	paths := []string{"test.com/cubicle", "test.com/cubicle/sosicle", "test.com/fascicle"}
   138  	for _, s := range paths {
   139  		p := PackageSource(dir, s)
   140  		if err := os.MkdirAll(p, 0755); err != nil {
   141  			t.Fatalf("Could not create tmp directory with err %s", err.Error())
   142  			return "", err
   143  		}
   144  		f, err := os.Create(path.Join(p, "test.go"))
   145  		if err != nil {
   146  			t.Fatalf("Could not create tmp file with err %s", err.Error())
   147  			return "", err
   148  		}
   149  		defer f.Close()
   150  
   151  		s := "package " + filepath.Base(p) + "\nimport _ \"test.com/fascicle\""
   152  		_, err = f.Write([]byte(s))
   153  		if err != nil {
   154  			t.Fatalf("Could not write to tmp file with err %s", err.Error())
   155  			return "", err
   156  		}
   157  	}
   158  
   159  	// Sub dir with no buildable go files
   160  	p := PackageSource(dir, "test.com/cubicle/empty")
   161  	if err := os.MkdirAll(PackageSource(dir, p), 0755); err != nil {
   162  		t.Fatalf("Could not create tmp directory with err %s", err.Error())
   163  		return "", err
   164  	}
   165  
   166  	return dir, nil
   167  
   168  }
   169  
   170  func TestReadAllRemoteDeps(t *testing.T) {
   171  	dir, err := setupTestPath(t)
   172  	if err != nil {
   173  		return
   174  	}
   175  	//defer os.Remove(dir)
   176  	// Setup all complete, lets read all our Canticle deps
   177  	dr := &DepReader{dir}
   178  
   179  	result, err := dr.ReadAllRemoteDependencies("test.com/cubicle")
   180  	if err != nil {
   181  		t.Errorf("Error reading valid pkg files %s error: %s", "test.com/cubicle", err.Error())
   182  	}
   183  	if result == nil {
   184  		t.Errorf("ReadAllRemoteDeps should never return nil deps")
   185  		return
   186  	}
   187  	if len(result) != 1 {
   188  		t.Errorf("ReadAllCantDeps returned unexpected number of deps %d", len(result))
   189  	}
   190  }
   191  
   192  func TestReadRemoteDependencies(t *testing.T) {
   193  	dr := &DepReader{os.ExpandEnv("$GOPATH")}
   194  
   195  	// Happy path
   196  	deps, err := dr.ReadRemoteDependencies("github.com/Comcast/Canticle")
   197  	if err != nil {
   198  		t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error())
   199  	}
   200  	if deps == nil {
   201  		t.Errorf("ReadRemoteDependencies should never return nil deps")
   202  		return
   203  	}
   204  	if len(deps) != 1 {
   205  		t.Errorf("ReadRemoteDependencies read incorrect number of deps")
   206  	}
   207  
   208  	expected := "github.com/Comcast/Canticle/canticles"
   209  	if deps[0] != expected {
   210  		t.Errorf("ReadCanticleDependencies returned %+v expected %+v", deps[0], expected)
   211  	}
   212  
   213  	// Not so happy path
   214  	deps, err = dr.ReadRemoteDependencies("github.comcast.com/viper-cog/nothere")
   215  	if err == nil {
   216  		t.Errorf("ReadRemoteDependencies returned nil error loading invalid path")
   217  	}
   218  	if deps == nil {
   219  		t.Errorf("ReadRemoteDependencies should never return nil deps")
   220  	}
   221  	if len(deps) != 0 {
   222  		t.Errorf("ReadRemoteDependencies returned non zero length deps loading invalid path")
   223  	}
   224  }
   225  */
   226  func TestReadDependencies(t *testing.T) {
   227  	dr := &DepReader{os.ExpandEnv("$GOPATH")}
   228  
   229  	// Happy path
   230  	deps, err := dr.GoRemoteDependencies("github.com/Comcast/Canticle/cant")
   231  	if err != nil {
   232  		t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error())
   233  	}
   234  	if deps == nil {
   235  		t.Errorf("ReadRemoteDependencies should never return nil deps")
   236  		return
   237  	}
   238  	if len(deps) != 2 {
   239  		t.Errorf("ReadRemoteDependencies read incorrect number of deps, got %d, expected %d", len(deps), 2)
   240  	}
   241  	expected := "github.com/Comcast/Canticle/buildinfo"
   242  	if expected != deps[0] {
   243  		t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[0], expected)
   244  	}
   245  	expected = "github.com/Comcast/Canticle/canticles"
   246  	if expected != deps[1] {
   247  		t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[1], expected)
   248  	}
   249  
   250  	// Not so happy path
   251  	deps, err = dr.GoRemoteDependencies("github.comcast.com/viper-cog/nothere")
   252  	if err == nil {
   253  		t.Errorf("ReadRemoteDependencies returned nil error loading invalid path")
   254  	}
   255  	if deps == nil {
   256  		t.Errorf("ReadRemoteDependencies should never return nil deps")
   257  	}
   258  	if len(deps) != 0 {
   259  		t.Errorf("ReadRemoteDependencies returned non zero length deps loading invalid path")
   260  	}
   261  
   262  	// Overriding path
   263  	// Make a temp dir to copy these files into
   264  	var testHome string
   265  	testHome, err = ioutil.TempDir("", "cant-test")
   266  	if err != nil {
   267  		t.Fatalf("Error creating test dir: %s", err.Error())
   268  	}
   269  	defer os.RemoveAll(testHome)
   270  
   271  	// Copy the files over
   272  	testDir := path.Join(testHome, "src", "github.com/Comcast/Canticle")
   273  	source := path.Join(os.ExpandEnv("$GOPATH"), "src", "github.com/Comcast/Canticle")
   274  	dc := NewDirCopier(source, testDir)
   275  	if err := dc.Copy(); err != nil {
   276  		fmt.Printf("Error copying files %s\n", err.Error())
   277  	}
   278  
   279  	// Test ourselves
   280  	dr.Gopath = testHome
   281  	deps, err = dr.GoRemoteDependencies("github.com/Comcast/Canticle/cant")
   282  	if err != nil {
   283  		t.Errorf("Error reading remotes for valid package %s error: %s", "github.com/Comcast/Canticle", err.Error())
   284  	}
   285  	if deps == nil {
   286  		t.Errorf("ReadRemoteDependencies should never return nil deps")
   287  		return
   288  	}
   289  	if len(deps) != 2 {
   290  		t.Errorf("ReadRemoteDependencies read incorrect number of deps, got %d, expected %d", len(deps), 2)
   291  	}
   292  	expected = "github.com/Comcast/Canticle/buildinfo"
   293  	if expected != deps[0] {
   294  		t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[0], expected)
   295  	}
   296  	expected = "github.com/Comcast/Canticle/canticles"
   297  	if expected != deps[1] {
   298  		t.Errorf("ReadRemoteDependencies returned %+v expected %+v", deps[1], expected)
   299  	}
   300  }