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