Add OS interface and fake implementation.
Signed-off-by: Random-Liu <lantaol@google.com>
This commit is contained in:
		
							
								
								
									
										41
									
								
								pkg/os/os.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								pkg/os/os.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2017 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 os | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // OS collects system level operations that need to be mocked out | ||||||
|  | // during tests. | ||||||
|  | type OS interface { | ||||||
|  | 	MkdirAll(path string, perm os.FileMode) error | ||||||
|  | 	RemoveAll(path string) error | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RealOS is used to dispatch the real system level operations. | ||||||
|  | type RealOS struct{} | ||||||
|  |  | ||||||
|  | // MkdirAll will will call os.MkdirAll to create a directory. | ||||||
|  | func (RealOS) MkdirAll(path string, perm os.FileMode) error { | ||||||
|  | 	return os.MkdirAll(path, perm) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RemoveAll will call os.RemoveAll to remove the path and its children. | ||||||
|  | func (RealOS) RemoveAll(path string) error { | ||||||
|  | 	return os.RemoveAll(path) | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								pkg/os/testing/fake_os.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								pkg/os/testing/fake_os.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2017 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 testing | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"os" | ||||||
|  |  | ||||||
|  | 	osInterface "github.com/kubernetes-incubator/cri-containerd/pkg/os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // FakeOS mocks out certain OS calls to avoid perturbing the filesystem | ||||||
|  | // If a member of the form `*Fn` is set, that function will be called in place | ||||||
|  | // of the real call. | ||||||
|  | type FakeOS struct { | ||||||
|  | 	MkdirAllFn  func(string, os.FileMode) error | ||||||
|  | 	RemoveAllFn func(string) error | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var _ osInterface.OS = &FakeOS{} | ||||||
|  |  | ||||||
|  | // NewFakeOS creates a FakeOS. | ||||||
|  | func NewFakeOS() *FakeOS { | ||||||
|  | 	return &FakeOS{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // MkdirAll is a fake call that invokes MkdirAllFn or just returns nil. | ||||||
|  | func (f *FakeOS) MkdirAll(path string, perm os.FileMode) error { | ||||||
|  | 	if f.MkdirAllFn != nil { | ||||||
|  | 		return f.MkdirAllFn(path, perm) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RemoveAll is a fake call that invokes RemoveAllFn or just returns nil. | ||||||
|  | func (f *FakeOS) RemoveAll(path string) error { | ||||||
|  | 	if f.RemoveAllFn != nil { | ||||||
|  | 		return f.RemoveAllFn(path) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Random-Liu
					Random-Liu