From 6a896704b5e99fbeb7d95f617c4dd6db8b16fb4f Mon Sep 17 00:00:00 2001 From: Kostiantyn Kalynovskyi Date: Tue, 16 Jun 2020 16:09:48 -0500 Subject: [PATCH] Move mock document file system to testutils This commit makes mock filesystem reusable by moving it to importable package in testutils Change-Id: I4885480a9ef3b8c81da0058db708c32187af8e12 Relates-To: #277 Relates-To: #238 Closes: #277 --- pkg/k8s/kubectl/kubectl_test.go | 33 ++++--------------- testutil/fs/fs.go | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 testutil/fs/fs.go diff --git a/pkg/k8s/kubectl/kubectl_test.go b/pkg/k8s/kubectl/kubectl_test.go index 3db24948c..d58967da3 100644 --- a/pkg/k8s/kubectl/kubectl_test.go +++ b/pkg/k8s/kubectl/kubectl_test.go @@ -26,6 +26,7 @@ import ( "opendev.org/airship/airshipctl/pkg/k8s/kubectl" k8sutils "opendev.org/airship/airshipctl/pkg/k8s/utils" "opendev.org/airship/airshipctl/testutil" + "opendev.org/airship/airshipctl/testutil/fs" k8stest "opendev.org/airship/airshipctl/testutil/k8sutils" ) @@ -37,28 +38,6 @@ var ( ErrTempFileError = errors.New("ErrTempFileError") ) -type MockFileSystem struct { - MockRemoveAll func() error - MockTempFile func() (document.File, error) - document.FileSystem -} - -func (fsys MockFileSystem) RemoveAll(string) error { return fsys.MockRemoveAll() } -func (fsys MockFileSystem) TempFile(string, string) (document.File, error) { - return fsys.MockTempFile() -} - -type TestFile struct { - document.File - MockName func() string - MockWrite func() (int, error) - MockClose func() error -} - -func (f TestFile) Name() string { return f.MockName() } -func (f TestFile) Write([]byte) (int, error) { return f.MockWrite() } -func (f TestFile) Close() error { return f.MockClose() } - func TestNewKubectlFromKubeConfigPath(t *testing.T) { f := k8sutils.FactoryFromKubeConfigPath(kubeconfigPath) kctl := kubectl.NewKubectl(f).WithBufferDir("/tmp/.airship") @@ -98,10 +77,10 @@ func TestApply(t *testing.T) { }{ { expectedErr: nil, - fs: MockFileSystem{ + fs: fs.MockFileSystem{ MockRemoveAll: func() error { return nil }, MockTempFile: func() (document.File, error) { - return TestFile{ + return fs.TestFile{ MockName: func() string { return filenameRC }, MockWrite: func() (int, error) { return 0, nil }, MockClose: func() error { return nil }, @@ -111,15 +90,15 @@ func TestApply(t *testing.T) { }, { expectedErr: ErrWriteOutError, - fs: MockFileSystem{ + fs: fs.MockFileSystem{ MockTempFile: func() (document.File, error) { return nil, ErrWriteOutError }}, }, { expectedErr: ErrTempFileError, - fs: MockFileSystem{ + fs: fs.MockFileSystem{ MockRemoveAll: func() error { return nil }, MockTempFile: func() (document.File, error) { - return TestFile{ + return fs.TestFile{ MockWrite: func() (int, error) { return 0, ErrTempFileError }, MockName: func() string { return filenameRC }, MockClose: func() error { return nil }, diff --git a/testutil/fs/fs.go b/testutil/fs/fs.go new file mode 100644 index 000000000..3e7901bbb --- /dev/null +++ b/testutil/fs/fs.go @@ -0,0 +1,57 @@ +/* + 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 fs + +import ( + "opendev.org/airship/airshipctl/pkg/document" +) + +// MockFileSystem implements Filesystem +type MockFileSystem struct { + MockRemoveAll func() error + MockTempDir func() (string, error) + MockTempFile func() (document.File, error) + document.FileSystem +} + +// RemoveAll Filesystem interface imlementation +func (fsys MockFileSystem) RemoveAll(string) error { return fsys.MockRemoveAll() } + +// TempFile Filesystem interface imlementation +func (fsys MockFileSystem) TempFile(string, string) (document.File, error) { + return fsys.MockTempFile() +} + +// TempDir Filesystem interface imlementation +func (fsys MockFileSystem) TempDir(string, string) (string, error) { + return fsys.MockTempDir() +} + +// TestFile implements file +type TestFile struct { + document.File + MockName func() string + MockWrite func() (int, error) + MockClose func() error +} + +// Name File interface imlementation +func (f TestFile) Name() string { return f.MockName() } + +// Write File interface imlementation +func (f TestFile) Write([]byte) (int, error) { return f.MockWrite() } + +// Close File interface imlementation +func (f TestFile) Close() error { return f.MockClose() }