Merge pull request #307 from mengqiy/file_loader

initial implementation for file loader
This commit is contained in:
Sean Sullivan 2018-02-20 18:28:14 -08:00 committed by GitHub
commit dd5ff912ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 182 additions and 0 deletions

36
pkg/loader/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
}

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
pkg/loader/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)
}

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
pkg/loader/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)
}