opentofu/internal/command/cliconfig/config_loader.go
Larry Bordowitz e1938ccca9
Some checks are pending
build / Build for freebsd_386 (push) Waiting to run
build / Build for linux_386 (push) Waiting to run
build / Build for openbsd_386 (push) Waiting to run
build / Build for windows_386 (push) Waiting to run
build / Build for freebsd_amd64 (push) Waiting to run
build / Build for linux_amd64 (push) Waiting to run
build / Build for openbsd_amd64 (push) Waiting to run
build / Build for solaris_amd64 (push) Waiting to run
build / Build for windows_amd64 (push) Waiting to run
build / Build for freebsd_arm (push) Waiting to run
build / Build for linux_arm (push) Waiting to run
build / Build for linux_arm64 (push) Waiting to run
build / Build for darwin_amd64 (push) Waiting to run
build / Build for darwin_arm64 (push) Waiting to run
build / End-to-end Tests for linux_386 (push) Waiting to run
build / End-to-end Tests for windows_386 (push) Waiting to run
build / End-to-end Tests for darwin_amd64 (push) Waiting to run
build / End-to-end Tests for linux_amd64 (push) Waiting to run
build / End-to-end Tests for windows_amd64 (push) Waiting to run
Quick Checks / List files changed for pull request (push) Waiting to run
Quick Checks / Unit tests for linux_386 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_amd64 (push) Blocked by required conditions
Quick Checks / Unit tests for windows_amd64 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_arm (push) Blocked by required conditions
Quick Checks / Unit tests for darwin_arm64 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_arm64 (push) Blocked by required conditions
Quick Checks / Race Tests (push) Blocked by required conditions
Quick Checks / End-to-end Tests (push) Blocked by required conditions
Quick Checks / Code Consistency Checks (push) Blocked by required conditions
Quick Checks / License Checks (push) Waiting to run
Website checks / List files changed for pull request (push) Waiting to run
Website checks / Build (push) Blocked by required conditions
Website checks / Test Installation Instructions (push) Blocked by required conditions
cliconfig: Create testable shim for fs actions (#3435)
Signed-off-by: Larry Bordowitz <laurence.bordowitz@gmail.com>
2025-10-29 12:03:55 -05:00

57 lines
1.8 KiB
Go

// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package cliconfig
import (
"io/fs"
"os"
)
// ConfigFileSystem is an abstraction layer for file system operations
// involved in loading the CLI configuration.
//
// The logic of choosing CLI configuration files is highly dependent on
// the location of those files in the filesystem. Since it's not feasible
// to test that in a real filesystem, we separate the filesystem operations
// from the logic of how the files are chosen. The real CLI config loader
// uses standard os package functions, and the test config loader uses
// fstest-based functions.
type ConfigFileSystem interface {
// Open opens the named file for reading.
Open(name string) (fs.File, error)
// ReadDir reads the named directory, returning all its directory entries sorted by filename.
ReadDir(name string) ([]os.DirEntry, error)
// ReadFile reads the named file and returns the contents.
ReadFile(name string) ([]byte, error)
// Stat returns a [FileInfo] describing the named file. If there is an error, it will be of type [*PathError].
Stat(name string) (os.FileInfo, error)
}
type standardFileSystem struct{}
func (sfs *standardFileSystem) ReadFile(name string) ([]byte, error) {
return os.ReadFile(name)
}
func (sfs *standardFileSystem) Stat(name string) (os.FileInfo, error) {
return os.Stat(name)
}
func (sfs *standardFileSystem) ReadDir(name string) ([]os.DirEntry, error) {
return os.ReadDir(name)
}
func (tfs *standardFileSystem) Open(name string) (fs.File, error) {
return os.Open(name)
}
type ConfigLoader struct {
ConfigFileSystem
}
func standardConfigLoader() *ConfigLoader {
return &ConfigLoader{ConfigFileSystem: &standardFileSystem{}}
}