initial commit for file loader

This commit is contained in:
Mengqi Yu
2018-02-20 18:07:25 -08:00
commit 194d845fc9
5 changed files with 182 additions and 0 deletions

36
factory.go Normal file
View File

@@ -0,0 +1,36 @@
/*
Copyright 2018 The Kubernetes Authors.
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
http://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 loader
import (
"fmt"
"k8s.io/kubectl/pkg/kinflate/util/fs"
)
func GetLoader(location string) (Loader, error) {
switch {
case isFilePath(location):
return NewFileLoader(fs.MakeRealFS(), location)
default:
return nil, fmt.Errorf("unknown scheme: %v", location)
}
}
func isFilePath(location string) bool {
return true
}

36
fake/fakefileloader.go Normal file
View File

@@ -0,0 +1,36 @@
/*
Copyright 2018 The Kubernetes Authors.
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
http://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 fake
import "k8s.io/kubectl/pkg/loader"
type fakefileLoader struct {
data []byte
err error
}
// NewFakeFileLoader returns Loader which always returns byte array and an error.
// Example: case no error: NewFakeFileLoader(yamlBytes, nil)
// Example: case return an error: NewFakeFileLoader(nil, errors.New("forced error"))
// Location parameter is unneeded because we always return data bytes or an error.
func NewFakeFileLoader(content []byte, e error) (loader.Loader, error) {
return &fakefileLoader{data: content, err: e}, nil
}
func (l *fakefileLoader) Load() ([]byte, error) {
return l.data, l.err
}

35
fileloader.go Normal file
View File

@@ -0,0 +1,35 @@
/*
Copyright 2018 The Kubernetes Authors.
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
http://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 loader
import (
"k8s.io/kubectl/pkg/kinflate/util/fs"
)
type fileLoader struct {
fs fs.FileSystem
path string
}
func NewFileLoader(fs fs.FileSystem, path string) (Loader, error) {
return &fileLoader{fs: fs, path: path}, nil
}
func (l *fileLoader) Load() ([]byte, error) {
return l.fs.ReadFile(l.path)
}

54
fileloader_test.go Normal file
View File

@@ -0,0 +1,54 @@
/*
Copyright 2018 The Kubernetes Authors.
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
http://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 loader
import (
"reflect"
"testing"
"k8s.io/kubectl/pkg/kinflate/util/fs"
)
func TestFileLoaderHappyPath(t *testing.T) {
fakefs := fs.MakeFakeFS()
location := "foo"
content := []byte("bar")
fakefs.WriteFile(location, content)
l, err := NewFileLoader(fakefs, location)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
b, err := l.Load()
if err != nil {
t.Fatalf("unexpected error in Load: %v", err)
}
if !reflect.DeepEqual(b, content) {
t.Fatalf("expected %s, but got %s", content, b)
}
}
func TestFileLoaderFileNotFound(t *testing.T) {
fakefs := fs.MakeFakeFS()
l, err := NewFileLoader(fakefs, "path/does/not/exist")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
_, err = l.Load()
if err == nil {
t.Fatal("expected error in Load, but no error returned")
}
}

21
loader.go Normal file
View File

@@ -0,0 +1,21 @@
/*
Copyright 2018 The Kubernetes Authors.
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
http://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 loader
type Loader interface {
Load() ([]byte, error)
}