blob: 16442b096ea4d64160712a14d8d32d49f08efa74 [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 codebase
import (
"io/ioutil"
"os"
"path"
"reflect"
"testing"
"android.googlesource.com/platform/tools/treble.git/hacksaw/config"
)
func TestAdd(t *testing.T) {
defer config.GetConfig().Reset()
firstCodebaseDir, err := ioutil.TempDir("", "first")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(firstCodebaseDir)
outputConfig, err := Add("first-codebase", firstCodebaseDir)
if err != nil {
t.Error(err)
}
expectedConfig := config.Config{
DefaultCodebase: "",
Codebases: map[string]string{
"first-codebase": firstCodebaseDir,
},
Workspaces: map[string]string{}}
if !reflect.DeepEqual(expectedConfig, *outputConfig) {
t.Errorf("Expected config %v different than output config %v",
expectedConfig, *outputConfig)
}
secondCodebaseDir, err := ioutil.TempDir("", "second")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(secondCodebaseDir)
if outputConfig, err = Add("second-codebase", secondCodebaseDir); err != nil {
t.Error(err)
}
expectedConfig = config.Config{
DefaultCodebase: "",
Codebases: map[string]string{
"first-codebase": firstCodebaseDir,
"second-codebase": secondCodebaseDir,
},
Workspaces: map[string]string{}}
if !reflect.DeepEqual(expectedConfig, *outputConfig) {
t.Errorf("Expected config %v different than output config %v",
expectedConfig, *outputConfig)
}
}
func TestAddDuplicate(t *testing.T) {
defer config.GetConfig().Reset()
codebaseDir, err := ioutil.TempDir("", "first")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(codebaseDir)
_, err = Add("codebase", codebaseDir)
if err != nil {
t.Error(err)
}
_, err = Add("codebase", codebaseDir)
if err == nil {
t.Error("Allowed duplicate codebase")
}
}
func TestAddInvalidCodebase(t *testing.T) {
defer config.GetConfig().Reset()
tempDir, err := ioutil.TempDir("", "codebase")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(tempDir)
testCodebaseDir := path.Join(tempDir, "doesnotexist")
_, err = Add("test-codebase", testCodebaseDir)
if err == nil {
t.Error("Adding a codebase with an invalid directory should not be allowed")
}
}
func TestList(t *testing.T) {
defer config.GetConfig().Reset()
firstCodebaseDir, err := ioutil.TempDir("", "first")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(firstCodebaseDir)
_, err = Add("first-codebase", firstCodebaseDir)
if err != nil {
t.Error(err)
}
secondCodebaseDir, err := ioutil.TempDir("", "second")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(secondCodebaseDir)
if _, err = Add("second-codebase", secondCodebaseDir); err != nil {
t.Error(err)
}
list := List()
expectedList := map[string]string{
"first-codebase": firstCodebaseDir,
"second-codebase": secondCodebaseDir,
}
if !reflect.DeepEqual(expectedList, list) {
t.Errorf("Codebase list %v is different than expected list %v",
list, expectedList)
}
}
func TestSetGetDefault(t *testing.T) {
defer config.GetConfig().Reset()
firstCodebaseDir, err := ioutil.TempDir("", "first")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(firstCodebaseDir)
_, err = Add("first-codebase", firstCodebaseDir)
if err != nil {
t.Error(err)
}
secondCodebaseDir, err := ioutil.TempDir("", "second")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(secondCodebaseDir)
_, err = Add("second-codebase", secondCodebaseDir)
if err != nil {
t.Error(err)
}
if err = SetDefault("second-codebase"); err != nil {
t.Error(err)
}
def := Default()
if def != "second-codebase" {
t.Error("Setting default codebase failed")
}
}
func TestBadDefault(t *testing.T) {
defer config.GetConfig().Reset()
testCodebaseDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(testCodebaseDir)
_, err = Add("test-codebase", testCodebaseDir)
if err != nil {
t.Error(err)
}
if err = SetDefault("does-not-exist"); err == nil {
t.Error("Allowed invalid default codebase")
}
}
func TestRemove(t *testing.T) {
defer config.GetConfig().Reset()
testCodebaseDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(testCodebaseDir)
_, err = Add("remove-me", testCodebaseDir)
if err != nil {
t.Error(err)
}
SetDefault("remove-me")
cfg, err := Remove("remove-me")
if err != nil {
t.Error(err)
}
_, ok := cfg.Codebases["remove-me"]
if ok {
t.Error("Removed codebase is still in the configuration")
}
if cfg.DefaultCodebase != "" {
t.Error("Removing the default codebase did not reset the default")
}
}
func TestBadRemove(t *testing.T) {
defer config.GetConfig().Reset()
testCodebaseDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Error(err)
}
defer os.RemoveAll(testCodebaseDir)
_, err = Add("remove-me", testCodebaseDir)
if err != nil {
t.Error(err)
}
_, err = Remove("does-not-exist")
if err == nil {
t.Error("Attempt to remove an unexistant codebase",
"should have failed")
}
}