blob: 134f64ee05ebc75d412c04fdc01570b8b97b01ad [file] [log] [blame]
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package workspace
import (
"io/ioutil"
"os"
"path"
"testing"
)
func TestCopy(t *testing.T) {
// Setup codebase
codebaseDir, err := ioutil.TempDir("", "codebase")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(codebaseDir)
project1GitDir := path.Join(codebaseDir, "project1", ".git")
if err = os.MkdirAll(project1GitDir, os.ModePerm); err != nil {
t.Error(err)
}
emptyBytes := []byte{}
project1File := path.Join(codebaseDir, "project1", "projectfile")
if err = ioutil.WriteFile(project1File, emptyBytes, os.ModePerm); err != nil {
t.Error(err)
}
symlink := path.Join(codebaseDir, "symlink")
if err = os.Symlink(path.Join(codebaseDir, "project1"), symlink); err != nil {
t.Error(err)
}
project2GitDir := path.Join(codebaseDir, "dirwithprojects", "project2", ".git")
if err = os.MkdirAll(project2GitDir, os.ModePerm); err != nil {
t.Error(err)
}
dirWithoutProjects := path.Join(codebaseDir, "dirwithoutprojects")
if err = os.Mkdir(dirWithoutProjects, os.ModePerm); err != nil {
t.Error(err)
}
projectSiblingFile := path.Join(codebaseDir, "dirwithprojects", "projectsiblingfile")
if err = ioutil.WriteFile(projectSiblingFile, emptyBytes, os.ModePerm); err != nil {
t.Error(err)
}
noProjectFile1 := path.Join(dirWithoutProjects, "noprojectfile1")
if err = ioutil.WriteFile(noProjectFile1, emptyBytes, os.ModePerm); err != nil {
t.Error(err)
}
noProjectFile2 := path.Join(dirWithoutProjects, "noprojectfile2")
if err = ioutil.WriteFile(noProjectFile2, emptyBytes, os.ModePerm); err != nil {
t.Error(err)
}
topFile := path.Join(codebaseDir, "topfile")
if err = ioutil.WriteFile(topFile, emptyBytes, os.ModePerm); err != nil {
t.Error(err)
}
gitProjects := []string{
"project1",
"dirwithprojects/project2",
}
// Set up workspace
workspaceDir, err := ioutil.TempDir("", "workspace")
if err != nil {
t.Error(err)
}
//This dir may already exist if the projects have been mounted
wsDirWithProjects := path.Join(workspaceDir, "dirwithprojects")
if err = os.Mkdir(wsDirWithProjects, os.ModePerm); err != nil {
t.Error(err)
}
copier := NewFileCopier()
if err = copier.Copy(codebaseDir, gitProjects, workspaceDir); err != nil {
t.Error(err)
}
wsTopFile := path.Join(workspaceDir, "topfile")
_, err = os.Stat(wsTopFile)
if err != nil {
t.Error(err)
}
wsNoProjectFile1 := path.Join(workspaceDir, "dirwithoutprojects", "noprojectfile1")
_, err = os.Stat(wsNoProjectFile1)
if err != nil {
t.Error(err)
}
wsNoProjectFile2 := path.Join(workspaceDir, "dirwithoutprojects", "noprojectfile2")
_, err = os.Stat(wsNoProjectFile2)
if err != nil {
t.Error(err)
}
wsProjectSiblingFile := path.Join(workspaceDir, "dirwithprojects", "projectsiblingfile")
_, err = os.Stat(wsProjectSiblingFile)
if err != nil {
t.Error(err)
}
wsSymlink := path.Join(workspaceDir, "symlink")
_, err = os.Stat(wsSymlink)
if err != nil {
t.Error(err)
}
//TODO: check why this is failing
// if linkInfo.Mode() & os.ModeSymlink != os.ModeSymlink {
// t.Error("Symlink not copied as symlink")
// }
wsProject2Dir := path.Join(workspaceDir, "dirwithprojects", "project2")
_, err = os.Stat(wsProject2Dir)
if err == nil {
t.Error("Project2 mistakenly copied")
} else if os.IsNotExist(err) {
//This error is expected
} else {
t.Error(err)
}
wsProject1Dir := path.Join(workspaceDir, "project1")
_, err = os.Stat(wsProject1Dir)
if err == nil {
t.Error("Project1 mistakenly copied")
} else if os.IsNotExist(err) {
//This error is expected
} else {
t.Error(err)
}
}