Repository: code-ready/crc
Pull request #1410 (2020-07-21 19:00:31)

Enable more linters esp. golint
Activate common linters. 
golint triggered lot of small changes. I find the code to be a little bit better now. Function names reads better.

openshift-ci-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/code-ready/crc/pull/1410#" title="Author self-approved">guillaumerose</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=code-ready%2Fcrc).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/code-ready/crc/blob/master/OWNERS)~~ [guillaumerose]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
openshift-ci-robot: @guillaumerose: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/e2e-crc | ca2c1916fae524838c0bbb45baf1643ac0b41f18 | [link](https://prow.ci.openshift.org/view/gs/origin-ci-test/pr-logs/pull/code-ready_crc/1410/pull-ci-code-ready-crc-master-e2e-crc/1285650887523438592) | `/test e2e-crc`

[Full PR test history](https://prow.ci.openshift.org/pr-history?org=code-ready&repo=crc&pr=1410). [Your PR dashboard](https://prow.ci.openshift.org/pr?query=is:pr+state:open+author:guillaumerose).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
praveenkumar: /test e2e-crc
praveenkumar: /retest this please
openshift-ci-robot: @praveenkumar: The `/retest` command does not accept any targets.
The following commands are available to trigger jobs:
* `/test e2e-crc`
* `/test images`

Use `/test all` to run all jobs.


<details>

In response to [this](https://github.com/code-ready/crc/pull/1410#issuecomment-662389499):

>/retest this please


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

Patch:
diff --git a/.golangci.yml b/.golangci.yml
index e35479675..d340a3518 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -4,7 +4,11 @@ run:
 
 linters:
   enable:
+    - errcheck
     - goimports
     - gofmt
     - gosec
     - gocritic
+    - deadcode
+    - misspell
+    - golint
diff --git a/cmd/crc-embedder/cmd/embed.go b/cmd/crc-embedder/cmd/embed.go
index 898eb0bcf..835434d63 100644
--- a/cmd/crc-embedder/cmd/embed.go
+++ b/cmd/crc-embedder/cmd/embed.go
@@ -87,20 +87,20 @@ func embedFiles(binary string, filenames []string) error {
 var (
 	dataFileUrls = map[string][]string{
 		"darwin": {
-			hyperkit.MachineDriverDownloadUrl,
-			hyperkit.HyperkitDownloadUrl,
-			constants.GetOcUrlForOs("darwin"),
+			hyperkit.MachineDriverDownloadURL,
+			hyperkit.HyperkitDownloadURL,
+			constants.GetOcURLForOs("darwin"),
 			constants.GetCrcTrayDownloadURL(),
-			constants.GetGoodhostsUrlForOs("darwin"),
+			constants.GetGoodhostsURLForOs("darwin"),
 		},
 		"linux": {
-			libvirt.MachineDriverDownloadUrl,
-			constants.GetOcUrlForOs("linux"),
-			constants.GetGoodhostsUrlForOs("linux"),
+			libvirt.MachineDriverDownloadURL,
+			constants.GetOcURLForOs("linux"),
+			constants.GetGoodhostsURLForOs("linux"),
 		},
 		"windows": {
-			constants.GetOcUrlForOs("windows"),
-			constants.GetGoodhostsUrlForOs("windows"),
+			constants.GetOcURLForOs("windows"),
+			constants.GetGoodhostsURLForOs("windows"),
 		},
 	}
 )
diff --git a/cmd/crc-embedder/cmd/list.go b/cmd/crc-embedder/cmd/list.go
index 074c54233..db3dad039 100644
--- a/cmd/crc-embedder/cmd/list.go
+++ b/cmd/crc-embedder/cmd/list.go
@@ -15,7 +15,7 @@ func init() {
 var listCmd = &cobra.Command{
 	Use:   "list",
 	Short: "List data files embedded in the crc binary",
-	Long:  `List all the data files wich were embedded in the crc binary`,
+	Long:  `List all the data files which were embedded in the crc binary`,
 	Run: func(cmd *cobra.Command, args []string) {
 		runList(args)
 	},
diff --git a/cmd/crc/cmd/config/config.go b/cmd/crc/cmd/config/config.go
index e05a2ba7c..b93ecb6f1 100644
--- a/cmd/crc/cmd/config/config.go
+++ b/cmd/crc/cmd/config/config.go
@@ -11,18 +11,20 @@ import (
 
 var (
 	// Start command settings in config
+
 	Bundle         = cfg.AddSetting("bundle", nil, []cfg.ValidationFnType{cfg.ValidateBundle}, []cfg.SetFn{cfg.SuccessfullyApplied})
 	CPUs           = cfg.AddSetting("cpus", constants.DefaultCPUs, []cfg.ValidationFnType{cfg.ValidateCPUs}, []cfg.SetFn{cfg.RequiresRestartMsg})
 	Memory         = cfg.AddSetting("memory", constants.DefaultMemory, []cfg.ValidationFnType{cfg.ValidateMemory}, []cfg.SetFn{cfg.RequiresRestartMsg})
-	NameServer     = cfg.AddSetting("nameserver", nil, []cfg.ValidationFnType{cfg.ValidateIpAddress}, []cfg.SetFn{cfg.SuccessfullyApplied})
+	NameServer     = cfg.AddSetting("nameserver", nil, []cfg.ValidationFnType{cfg.ValidateIPAddress}, []cfg.SetFn{cfg.SuccessfullyApplied})
 	PullSecretFile = cfg.AddSetting("pull-secret-file", nil, []cfg.ValidationFnType{cfg.ValidatePath}, []cfg.SetFn{cfg.SuccessfullyApplied})
 
 	DisableUpdateCheck   = cfg.AddSetting("disable-update-check", nil, []cfg.ValidationFnType{cfg.ValidateBool}, []cfg.SetFn{cfg.SuccessfullyApplied})
 	ExperimentalFeatures = cfg.AddSetting("enable-experimental-features", nil, []cfg.ValidationFnType{cfg.ValidateBool}, []cfg.SetFn{cfg.SuccessfullyApplied})
 
 	// Proxy Configuration
-	HttpProxy  = cfg.AddSetting("http-proxy", nil, []cfg.ValidationFnType{cfg.ValidateURI}, []cfg.SetFn{cfg.SuccessfullyApplied})
-	HttpsProxy = cfg.AddSetting("https-proxy", nil, []cfg.ValidationFnType{cfg.ValidateURI}, []cfg.SetFn{cfg.SuccessfullyApplied})
+
+	HTTPProxy  = cfg.AddSetting("http-proxy", nil, []cfg.ValidationFnType{cfg.ValidateURI}, []cfg.SetFn{cfg.SuccessfullyApplied})
+	HTTPSProxy = cfg.AddSetting("https-proxy", nil, []cfg.ValidationFnType{cfg.ValidateURI}, []cfg.SetFn{cfg.SuccessfullyApplied})
 	NoProxy    = cfg.AddSetting("no-proxy", nil, []cfg.ValidationFnType{cfg.ValidateNoProxy}, []cfg.SetFn{cfg.SuccessfullyApplied})
 )
 
@@ -56,14 +58,12 @@ func less(lhsKey, rhsKey string) bool {
 			if lhsKey[4:] == rhsKey[4:] {
 				// we want skip-foo before warn-foo
 				return lhsKey < rhsKey
-			} else {
-				// ignore skip-/warn- prefix
-				return lhsKey[4:] < rhsKey[4:]
 			}
-		} else {
-			// lhs is preflight, rhs is not preflight
-			return false
+			// ignore skip-/warn- prefix
+			return lhsKey[4:] < rhsKey[4:]
 		}
+		// lhs is preflight, rhs is not preflight
+		return false
 	}
 
 	if isPreflightKey(rhsKey) {
diff --git a/cmd/crc/cmd/daemon_nonwin.go b/cmd/crc/cmd/daemon_nonwin.go
index 97ae89da4..64e3a7014 100644
--- a/cmd/crc/cmd/daemon_nonwin.go
+++ b/cmd/crc/cmd/daemon_nonwin.go
@@ -13,9 +13,9 @@ import (
 func runDaemon() {
 	// Remove if an old socket is present
 	os.Remove(constants.DaemonSocketPath)
-	crcApiServer, err := api.CreateApiServer(constants.DaemonSocketPath)
+	crcAPIServer, err := api.CreateAPIServer(constants.DaemonSocketPath)
 	if err != nil {
 		logging.Fatal("Failed to launch daemon", err)
 	}
-	crcApiServer.Serve()
+	crcAPIServer.Serve()
 }
diff --git a/cmd/crc/cmd/ip.go b/cmd/crc/cmd/ip.go
index 1c1f9287c..a9f24c357 100644
--- a/cmd/crc/cmd/ip.go
+++ b/cmd/crc/cmd/ip.go
@@ -23,14 +23,14 @@ var ipCmd = &cobra.Command{
 }
 
 func runIP(arguments []string) {
-	ipConfig := machine.IpConfig{
+	ipConfig := machine.IPConfig{
 		Name:  constants.DefaultName,
 		Debug: isDebugLog(),
 	}
 
 	exitIfMachineMissing(ipConfig.Name)
 
-	result, err := machine.Ip(ipConfig)
+	result, err := machine.IP(ipConfig)
 	if err != nil {
 		errors.Exit(1)
 	}
diff --git a/cmd/crc/cmd/oc_env.go b/cmd/crc/cmd/oc_env.go
index 1bc0c21a7..350899217 100644
--- a/cmd/crc/cmd/oc_env.go
+++ b/cmd/crc/cmd/oc_env.go
@@ -29,8 +29,8 @@ var ocEnvCmd = &cobra.Command{
 		}
 		output.Outln(shell.GetPathEnvString(userShell, constants.CrcOcBinDir))
 		if proxyConfig.IsEnabled() {
-			output.Outln(shell.GetEnvString(userShell, "HTTP_PROXY", proxyConfig.HttpProxy))
-			output.Outln(shell.GetEnvString(userShell, "HTTPS_PROXY", proxyConfig.HttpsProxy))
+			output.Outln(shell.GetEnvString(userShell, "HTTP_PROXY", proxyConfig.HTTPProxy))
+			output.Outln(shell.GetEnvString(userShell, "HTTPS_PROXY", proxyConfig.HTTPSProxy))
 			output.Outln(shell.GetEnvString(userShell, "NO_PROXY", proxyConfig.GetNoProxyString()))
 		}
 		output.Outln(shell.GenerateUsageHint(userShell, "crc oc-env"))
diff --git a/cmd/crc/cmd/podman_env.go b/cmd/crc/cmd/podman_env.go
index dabe22c89..d1cd2666f 100644
--- a/cmd/crc/cmd/podman_env.go
+++ b/cmd/crc/cmd/podman_env.go
@@ -23,14 +23,14 @@ var podmanEnvCmd = &cobra.Command{
 			errors.ExitWithMessage(1, "Error running the podman-env command: %s", err.Error())
 		}
 
-		ipConfig := machine.IpConfig{
+		ipConfig := machine.IPConfig{
 			Name:  constants.DefaultName,
 			Debug: isDebugLog(),
 		}
 
 		exitIfMachineMissing(ipConfig.Name)
 
-		result, err := machine.Ip(ipConfig)
+		result, err := machine.IP(ipConfig)
 		if err != nil {
 			errors.Exit(1)
 		}
diff --git a/cmd/crc/cmd/root.go b/cmd/crc/cmd/root.go
index 92a96024b..ea478fc45 100644
--- a/cmd/crc/cmd/root.go
+++ b/cmd/crc/cmd/root.go
@@ -82,7 +82,7 @@ func setConfigDefaults() {
 }
 
 func exitIfMachineMissing(name string) {
-	exists, err := machine.MachineExists(name)
+	exists, err := machine.Exists(name)
 	if err != nil {
 		errors.ExitWithMessage(1, err.Error())
 	}
@@ -92,8 +92,8 @@ func exitIfMachineMissing(name string) {
 }
 
 func setProxyDefaults() {
-	httpProxy := config.GetString(cmdConfig.HttpProxy.Name)
-	httpsProxy := config.GetString(cmdConfig.HttpsProxy.Name)
+	httpProxy := config.GetString(cmdConfig.HTTPProxy.Name)
+	httpsProxy := config.GetString(cmdConfig.HTTPSProxy.Name)
 	noProxy := config.GetString(cmdConfig.NoProxy.Name)
 
 	proxyConfig, err := network.NewProxyDefaults(httpProxy, httpsProxy, noProxy)
@@ -102,8 +102,8 @@ func setProxyDefaults() {
 	}
 
 	if proxyConfig.IsEnabled() {
-		logging.Debugf("HTTP-PROXY: %s, HTTPS-PROXY: %s, NO-PROXY: %s", proxyConfig.HttpProxyForDisplay(),
-			proxyConfig.HttpsProxyForDisplay(), proxyConfig.GetNoProxyString())
+		logging.Debugf("HTTP-PROXY: %s, HTTPS-PROXY: %s, NO-PROXY: %s", proxyConfig.HTTPProxyForDisplay(),
+			proxyConfig.HTTPSProxyForDisplay(), proxyConfig.GetNoProxyString())
 		proxyConfig.ApplyToEnvironment()
 	}
 }
diff --git a/cmd/crc/cmd/start.go b/cmd/crc/cmd/start.go
index bcdf0d49d..2c558c999 100644
--- a/cmd/crc/cmd/start.go
+++ b/cmd/crc/cmd/start.go
@@ -99,7 +99,7 @@ func validateStartFlags() error {
 		return err
 	}
 	if crcConfig.GetString(config.NameServer.Name) != "" {
-		if err := validation.ValidateIpAddress(crcConfig.GetString(config.NameServer.Name)); err != nil {
+		if err := validation.ValidateIPAddress(crcConfig.GetString(config.NameServer.Name)); err != nil {
 			return err
 		}
 	}
diff --git a/go.mod b/go.mod
index 12cc2c754..6eaa4ff72 100644
--- a/go.mod
+++ b/go.mod
@@ -15,6 +15,7 @@ require (
 	github.com/docker/go-units v0.4.0
 	github.com/inconshreveable/mousetrap v1.0.0 // indirect
 	github.com/mattn/go-colorable v0.1.2
+	github.com/pbnjay/memory v0.0.0-20190104145345-974d429e7ae4
 	github.com/pborman/uuid v1.2.0
 	github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
 	github.com/pkg/errors v0.8.1
diff --git a/go.sum b/go.sum
index aa6da42cc..4da1926a4 100644
--- a/go.sum
+++ b/go.sum
@@ -77,6 +77,8 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1f
 github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
 github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/pbnjay/memory v0.0.0-20190104145345-974d429e7ae4 h1:MfIUBZ1bz7TgvQLVa/yPJZOGeKEgs6eTKUjz3zB4B+U=
+github.com/pbnjay/memory v0.0.0-20190104145345-974d429e7ae4/go.mod h1:RMU2gJXhratVxBDTFeOdNhd540tG57lt9FIUV0YLvIQ=
 github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
diff --git a/pkg/crc/api/api.go b/pkg/crc/api/api.go
index 2dbdbd481..ce06212b3 100644
--- a/pkg/crc/api/api.go
+++ b/pkg/crc/api/api.go
@@ -9,17 +9,17 @@ import (
 	"github.com/code-ready/crc/pkg/crc/logging"
 )
 
-func CreateApiServer(socketPath string) (CrcApiServer, error) {
+func CreateAPIServer(socketPath string) (CrcAPIServer, error) {
 	listener, err := net.Listen("unix", socketPath)
 	if err != nil {
 		logging.Error("Failed to create socket: ", err.Error())
-		return CrcApiServer{}, err
+		return CrcAPIServer{}, err
 	}
-	return createApiServerWithListener(listener)
+	return createAPIServerWithListener(listener)
 }
 
-func createApiServerWithListener(listener net.Listener) (CrcApiServer, error) {
-	apiServer := CrcApiServer{
+func createAPIServerWithListener(listener net.Listener) (CrcAPIServer, error) {
+	apiServer := CrcAPIServer{
 		listener:               listener,
 		clusterOpsRequestsChan: make(chan clusterOpsRequest, 10),
 		handlers: map[string]handlerFunc{
@@ -34,7 +34,7 @@ func createApiServerWithListener(listener net.Listener) (CrcApiServer, error) {
 	return apiServer, nil
 }
 
-func (api CrcApiServer) Serve() {
+func (api CrcAPIServer) Serve() {
 	go api.handleClusterOperations() // go routine that handles start, stop and delete calls
 	for {
 		conn, err := api.listener.Accept()
@@ -46,24 +46,24 @@ func (api CrcApiServer) Serve() {
 	}
 }
 
-func (api CrcApiServer) handleClusterOperations() {
+func (api CrcAPIServer) handleClusterOperations() {
 	for req := range api.clusterOpsRequestsChan {
 		api.handleRequest(req.command, req.socket)
 	}
 }
 
-func (api CrcApiServer) handleRequest(req commandRequest, conn net.Conn) {
+func (api CrcAPIServer) handleRequest(req commandRequest, conn net.Conn) {
 	defer conn.Close()
 	var result string
 	if handler, ok := api.handlers[req.Command]; ok {
 		result = handler(req.Args)
 	} else {
-		result = encodeErrorToJson(fmt.Sprintf("Unknown command supplied: %s", req.Command))
+		result = encodeErrorToJSON(fmt.Sprintf("Unknown command supplied: %s", req.Command))
 	}
 	writeStringToSocket(conn, result)
 }
 
-func (api CrcApiServer) handleConnections(conn net.Conn) {
+func (api CrcAPIServer) handleConnections(conn net.Conn) {
 	inBuffer := make([]byte, 1024)
 	var req commandRequest
 	numBytes, err := conn.Read(inBuffer)
@@ -89,7 +89,7 @@ func (api CrcApiServer) handleConnections(conn net.Conn) {
 		if !addRequestToChannel(r, api.clusterOpsRequestsChan) {
 			defer conn.Close()
 			logging.Error("Channel capacity reached, unable to add new request")
-			errMsg := encodeErrorToJson("Sockets channel capacity reached, unable to add new request")
+			errMsg := encodeErrorToJSON("Sockets channel capacity reached, unable to add new request")
 			writeStringToSocket(conn, errMsg)
 			return
 		}
diff --git a/pkg/crc/api/api_windows.go b/pkg/crc/api/api_windows.go
index 992f0e887..ba9ef7e17 100644
--- a/pkg/crc/api/api_windows.go
+++ b/pkg/crc/api/api_windows.go
@@ -17,16 +17,16 @@ type crcDaemonService struct {
 
 func (m *crcDaemonService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) {
 	const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown
-	crcApiServer, err := CreateApiServer(m.socketPath)
+	crcAPIServer, err := CreateAPIServer(m.socketPath)
 	if err != nil {
 		elog.Error(1, fmt.Sprintf("Failed to start CRC daemon service: %v", err)) // nolint
 		return
 	}
 	// Windows servivce manager calls OnStart when starting the service
 	// and it calls this method, which the service manager expects to handle
-	// commands like stop, shutdown. crcApiServer.Serve is being called as a go routine
+	// commands like stop, shutdown. crcAPIServer.Serve is being called as a go routine
 	// since we don't want it block
-	go crcApiServer.Serve()
+	go crcAPIServer.Serve()
 	changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
 
 	MainLoop(r, changes)
diff --git a/pkg/crc/api/handlers.go b/pkg/crc/api/handlers.go
index f33067f23..05ea7f95f 100644
--- a/pkg/crc/api/handlers.go
+++ b/pkg/crc/api/handlers.go
@@ -16,7 +16,7 @@ import (
 func statusHandler(_ ArgsType) string {
 	statusConfig := machine.ClusterStatusConfig{Name: constants.DefaultName}
 	clusterStatus, _ := machine.Status(statusConfig)
-	return encodeStructToJson(clusterStatus)
+	return encodeStructToJSON(clusterStatus)
 }
 
 func stopHandler(_ ArgsType) string {
@@ -25,7 +25,7 @@ func stopHandler(_ ArgsType) string {
 		Debug: true,
 	}
 	commandResult, _ := machine.Stop(stopConfig)
-	return encodeStructToJson(commandResult)
+	return encodeStructToJSON(commandResult)
 }
 
 func startHandler(_ ArgsType) string {
@@ -39,7 +39,7 @@ func startHandler(_ ArgsType) string {
 		Debug:         true,
 	}
 	status, _ := machine.Start(startConfig)
-	return encodeStructToJson(status)
+	return encodeStructToJSON(status)
 }
 
 func versionHandler(_ ArgsType) string {
@@ -49,7 +49,7 @@ func versionHandler(_ ArgsType) string {
 		OpenshiftVersion: version.GetBundleVersion(),
 		Success:          true,
 	}
-	return encodeStructToJson(v)
+	return encodeStructToJSON(v)
 }
 
 func getPullSecretFileContent() (string, error) {
@@ -67,16 +67,16 @@ func getPullSecretFileContent() (string, error) {
 func deleteHandler(_ ArgsType) string {
 	delConfig := machine.DeleteConfig{Name: constants.DefaultName}
 	r, _ := machine.Delete(delConfig)
-	return encodeStructToJson(r)
+	return encodeStructToJSON(r)
 }
 
 func webconsoleURLHandler(_ ArgsType) string {
 	consoleConfig := machine.ConsoleConfig{Name: constants.DefaultName}
 	r, _ := machine.GetConsoleURL(consoleConfig)
-	return encodeStructToJson(r)
+	return encodeStructToJSON(r)
 }
 
-func encodeStructToJson(v interface{}) string {
+func encodeStructToJSON(v interface{}) string {
 	s, err := json.Marshal(v)
 	if err != nil {
 		logging.Error(err.Error())
@@ -89,9 +89,9 @@ func encodeStructToJson(v interface{}) string {
 	return string(s)
 }
 
-func encodeErrorToJson(errMsg string) string {
+func encodeErrorToJSON(errMsg string) string {
 	err := commandError{
 		Err: errMsg,
 	}
-	return encodeStructToJson(err)
+	return encodeStructToJSON(err)
 }
diff --git a/pkg/crc/api/types.go b/pkg/crc/api/types.go
index e1bc02412..795354eda 100644
--- a/pkg/crc/api/types.go
+++ b/pkg/crc/api/types.go
@@ -11,7 +11,7 @@ type commandError struct {
 	Err string
 }
 
-type CrcApiServer struct {
+type CrcAPIServer struct {
 	listener               net.Listener
 	clusterOpsRequestsChan chan clusterOpsRequest
 	handlers               map[string]handlerFunc // relates commands to handler func
diff --git a/pkg/crc/cache/cache.go b/pkg/crc/cache/cache.go
index 5bc4db949..9141abde1 100644
--- a/pkg/crc/cache/cache.go
+++ b/pkg/crc/cache/cache.go
@@ -38,15 +38,15 @@ func New(binaryName string, archiveURL string, destDir string, version string, g
 }
 
 func NewOcCache(version string, getVersion func() (string, error)) *Cache {
-	return New(constants.OcBinaryName, constants.GetOcUrl(), constants.CrcOcBinDir, version, getVersion)
+	return New(constants.OcBinaryName, constants.GetOcURL(), constants.CrcOcBinDir, version, getVersion)
 }
 
 func NewPodmanCache(version string, getVersion func() (string, error)) *Cache {
-	return New(constants.PodmanBinaryName, constants.GetPodmanUrl(), constants.CrcBinDir, version, getVersion)
+	return New(constants.PodmanBinaryName, constants.GetPodmanURL(), constants.CrcBinDir, version, getVersion)
 }
 
 func NewGoodhostsCache(version string, getVersion func() (string, error)) *Cache {
-	return New(constants.GoodhostsBinaryName, constants.GetGoodhostsUrl(), constants.CrcBinDir, version, getVersion)
+	return New(constants.GoodhostsBinaryName, constants.GetGoodhostsURL(), constants.CrcBinDir, version, getVersion)
 }
 
 func (c *Cache) IsCached() bool {
diff --git a/pkg/crc/cache/cache_darwin.go b/pkg/crc/cache/cache_darwin.go
index 385be6ccc..7ce3a2849 100644
--- a/pkg/crc/cache/cache_darwin.go
+++ b/pkg/crc/cache/cache_darwin.go
@@ -6,9 +6,9 @@ import (
 )
 
 func NewMachineDriverHyperkitCache(version string, getVersion func() (string, error)) *Cache {
-	return New(hyperkit.MachineDriverCommand, hyperkit.MachineDriverDownloadUrl, constants.CrcBinDir, version, getVersion)
+	return New(hyperkit.MachineDriverCommand, hyperkit.MachineDriverDownloadURL, constants.CrcBinDir, version, getVersion)
 }
 
 func NewHyperkitCache(version string, getVersion func() (string, error)) *Cache {
-	return New(hyperkit.HyperkitCommand, hyperkit.HyperkitDownloadUrl, constants.CrcBinDir, version, getVersion)
+	return New(hyperkit.HyperkitCommand, hyperkit.HyperkitDownloadURL, constants.CrcBinDir, version, getVersion)
 }
diff --git a/pkg/crc/cache/cache_linux.go b/pkg/crc/cache/cache_linux.go
index 2954e7359..08510365f 100644
--- a/pkg/crc/cache/cache_linux.go
+++ b/pkg/crc/cache/cache_linux.go
@@ -6,5 +6,5 @@ import (
 )
 
 func NewMachineDriverLibvirtCache(version string, getVersion func() (string, error)) *Cache {
-	return New(libvirt.MachineDriverCommand, libvirt.MachineDriverDownloadUrl, constants.CrcBinDir, version, getVersion)
+	return New(libvirt.MachineDriverCommand, libvirt.MachineDriverDownloadURL, constants.CrcBinDir, version, getVersion)
 }
diff --git a/pkg/crc/cluster/cert-renewal.go b/pkg/crc/cluster/cert-renewal.go
index 2d7ad2c44..c81a13289 100644
--- a/pkg/crc/cluster/cert-renewal.go
+++ b/pkg/crc/cluster/cert-renewal.go
@@ -12,7 +12,7 @@ import (
 	"github.com/code-ready/crc/pkg/crc/systemd"
 )
 
-func waitForPendingCsrs(ocConfig oc.OcConfig) error {
+func waitForPendingCsrs(ocConfig oc.Config) error {
 	waitForPendingCsr := func() error {
 		output, _, err := ocConfig.RunOcCommand("get", "csr")
 		if err != nil {
@@ -31,7 +31,7 @@ func waitForPendingCsrs(ocConfig oc.OcConfig) error {
 	return errors.RetryAfter(120, waitForPendingCsr, time.Second*5)
 }
 
-func RegenerateCertificates(sshRunner *ssh.SSHRunner, ocConfig oc.OcConfig) error {
+func RegenerateCertificates(sshRunner *ssh.Runner, ocConfig oc.Config) error {
 	sd := systemd.NewInstanceSystemdCommander(sshRunner)
 	startedKubelet, err := sd.Start("kubelet")
 	if err != nil {
diff --git a/pkg/crc/cluster/cluster.go b/pkg/crc/cluster/cluster.go
index a2d036d1c..67a76061e 100644
--- a/pkg/crc/cluster/cluster.go
+++ b/pkg/crc/cluster/cluster.go
@@ -15,8 +15,8 @@ import (
 	"github.com/pborman/uuid"
 )
 
-func WaitForSsh(sshRunner *ssh.SSHRunner) error {
-	checkSshConnectivity := func() error {
+func WaitForSSH(sshRunner *ssh.Runner) error {
+	checkSSHConnectivity := func() error {
 		_, err := sshRunner.Run("exit 0")
 		if err != nil {
 			return &errors.RetriableError{Err: err}
@@ -24,7 +24,7 @@ func WaitForSsh(sshRunner *ssh.SSHRunner) error {
 		return nil
 	}
 
-	return errors.RetryAfter(60, checkSshConnectivity, time.Second)
+	return errors.RetryAfter(60, checkSSHConnectivity, time.Second)
 }
 
 type CertExpiryState int
@@ -36,7 +36,7 @@ const (
 )
 
 // CheckCertsValidity checks if the cluster certs have expired or going to expire in next 7 days
-func CheckCertsValidity(sshRunner *ssh.SSHRunner) (CertExpiryState, error) {
+func CheckCertsValidity(sshRunner *ssh.Runner) (CertExpiryState, error) {
 	certExpiryDate, err := getcertExpiryDateFromVM(sshRunner)
 	if err != nil {
 		return Unknown, err
@@ -48,7 +48,7 @@ func CheckCertsValidity(sshRunner *ssh.SSHRunner) (CertExpiryState, error) {
 	return CertNotExpired, nil
 }
 
-func getcertExpiryDateFromVM(sshRunner *ssh.SSHRunner) (time.Time, error) {
+func getcertExpiryDateFromVM(sshRunner *ssh.Runner) (time.Time, error) {
 	certExpiryDate := time.Time{}
 	certExpiryDateCmd := `date --date="$(sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate | cut -d= -f 2)" --iso-8601=seconds`
 	output, err := sshRunner.Run(certExpiryDateCmd)
@@ -63,7 +63,7 @@ func getcertExpiryDateFromVM(sshRunner *ssh.SSHRunner) (time.Time, error) {
 }
 
 // Return size of disk, used space in bytes and the mountpoint
-func GetRootPartitionUsage(sshRunner *ssh.SSHRunner) (int64, int64, error) {
+func GetRootPartitionUsage(sshRunner *ssh.Runner) (int64, int64, error) {
 	cmd := "df -B1 --output=size,used,target /sysroot | tail -1"
 
 	out, err := sshRunner.Run(cmd)
@@ -83,7 +83,7 @@ func GetRootPartitionUsage(sshRunner *ssh.SSHRunner) (int64, int64, error) {
 	return diskSize, diskUsage, nil
 }
 
-func AddPullSecret(sshRunner *ssh.SSHRunner, ocConfig oc.OcConfig, pullSec string) error {
+func AddPullSecret(sshRunner *ssh.Runner, ocConfig oc.Config, pullSec string) error {
 	if err := addPullSecretToInstanceDisk(sshRunner, pullSec); err != nil {
 		return err
 	}
@@ -103,7 +103,7 @@ func AddPullSecret(sshRunner *ssh.SSHRunner, ocConfig oc.OcConfig, pullSec strin
 	return nil
 }
 
-func UpdateClusterID(ocConfig oc.OcConfig) error {
+func UpdateClusterID(ocConfig oc.Config) error {
 	clusterID := uuid.New()
 	cmdArgs := []string{"patch", "clusterversion", "version", "-p",
 		fmt.Sprintf(`{"spec":{"clusterID":"%s"}}`, clusterID), "--type", "merge"}
@@ -119,9 +119,9 @@ func UpdateClusterID(ocConfig oc.OcConfig) error {
 	return nil
 }
 
-func AddProxyConfigToCluster(ocConfig oc.OcConfig, proxy *network.ProxyConfig) error {
+func AddProxyConfigToCluster(ocConfig oc.Config, proxy *network.ProxyConfig) error {
 	cmdArgs := []string{"patch", "proxy", "cluster", "-p",
-		fmt.Sprintf(`{"spec":{"httpProxy":"%s", "httpsProxy":"%s", "noProxy":"%s"}}`, proxy.HttpProxy, proxy.HttpsProxy, proxy.GetNoProxyString()),
+		fmt.Sprintf(`{"spec":{"httpProxy":"%s", "httpsProxy":"%s", "noProxy":"%s"}}`, proxy.HTTPProxy, proxy.HTTPSProxy, proxy.GetNoProxyString()),
 		"-n", "openshift-config", "--type", "merge"}
 
 	if err := WaitForOpenshiftResource(ocConfig, "proxy"); err != nil {
@@ -138,12 +138,12 @@ func AddProxyConfigToCluster(ocConfig oc.OcConfig, proxy *network.ProxyConfig) e
 // Since proxy operator is not able to make changes to in the kubelet/crio side,
 // this is the job of machine config operator on the node and for crc this is not
 // possible so we do need to put it here.
-func AddProxyToKubeletAndCriO(sshRunner *ssh.SSHRunner, proxy *network.ProxyConfig) error {
+func AddProxyToKubeletAndCriO(sshRunner *ssh.Runner, proxy *network.ProxyConfig) error {
 	proxyTemplate := `[Service]
 Environment=HTTP_PROXY=%s
 Environment=HTTPS_PROXY=%s
 Environment=NO_PROXY=.cluster.local,.svc,10.128.0.0/14,172.30.0.0/16,%s`
-	p := fmt.Sprintf(proxyTemplate, proxy.HttpProxy, proxy.HttpsProxy, proxy.GetNoProxyString())
+	p := fmt.Sprintf(proxyTemplate, proxy.HTTPProxy, proxy.HTTPSProxy, proxy.GetNoProxyString())
 	// This will create a systemd drop-in configuration for proxy (both for kubelet and crio services) on the VM.
 	err := sshRunner.SetTextContentAsRoot("/etc/systemd/system/crio.service.d/10-default-env.conf", p, 0644)
 	if err != nil {
@@ -156,7 +156,7 @@ Environment=NO_PROXY=.cluster.local,.svc,10.128.0.0/14,172.30.0.0/16,%s`
 	return nil
 }
 
-func addPullSecretToInstanceDisk(sshRunner *ssh.SSHRunner, pullSec string) error {
+func addPullSecretToInstanceDisk(sshRunner *ssh.Runner, pullSec string) error {
 	err := sshRunner.SetTextContentAsRoot("/var/lib/kubelet/config.json", pullSec, 0600)
 	if err != nil {
 		return err
@@ -165,7 +165,7 @@ func addPullSecretToInstanceDisk(sshRunner *ssh.SSHRunner, pullSec string) error
 	return nil
 }
 
-func WaitforRequestHeaderClientCaFile(ocConfig oc.OcConfig) error {
+func WaitforRequestHeaderClientCaFile(ocConfig oc.Config) error {
 	if err := WaitForOpenshiftResource(ocConfig, "configmaps"); err != nil {
 		return err
 	}
@@ -187,12 +187,12 @@ func WaitforRequestHeaderClientCaFile(ocConfig oc.OcConfig) error {
 	return errors.RetryAfter(90, lookupRequestHeaderClientCa, 2*time.Second)
 }
 
-func DeleteOpenshiftApiServerPods(ocConfig oc.OcConfig) error {
+func DeleteOpenshiftAPIServerPods(ocConfig oc.Config) error {
 	if err := WaitForOpenshiftResource(ocConfig, "pod"); err != nil {
 		return err
 	}
 
-	deleteOpenshiftApiserverPods := func() error {
+	deleteOpenshiftAPIServerPods := func() error {
 		cmdArgs := []string{"delete", "pod", "--all", "-n", "openshift-apiserver"}
 		_, _, err := ocConfig.RunOcCommand(cmdArgs...)
 		if err != nil {
@@ -201,10 +201,10 @@ func DeleteOpenshiftApiServerPods(ocConfig oc.OcConfig) error {
 		return nil
 	}
 
-	return errors.RetryAfter(60, deleteOpenshiftApiserverPods, time.Second)
+	return errors.RetryAfter(60, deleteOpenshiftAPIServerPods, time.Second)
 }
 
-func CheckProxySettingsForOperator(ocConfig oc.OcConfig, proxy *network.ProxyConfig, deployment, namespace string) (bool, error) {
+func CheckProxySettingsForOperator(ocConfig oc.Config, proxy *network.ProxyConfig, deployment, namespace string) (bool, error) {
 	if !proxy.IsEnabled() {
 		logging.Debugf("No proxy in use")
 		return true, nil
@@ -214,7 +214,7 @@ func CheckProxySettingsForOperator(ocConfig oc.OcConfig, proxy *network.ProxyCon
 	if err != nil {
 		return false, err
 	}
-	if strings.Contains(out, proxy.HttpsProxy) || strings.Contains(out, proxy.HttpProxy) {
+	if strings.Contains(out, proxy.HTTPSProxy) || strings.Contains(out, proxy.HTTPProxy) {
 		return true, nil
 	}
 	return false, nil
diff --git a/pkg/crc/cluster/clusteroperator.go b/pkg/crc/cluster/clusteroperator.go
index 517abdd4a..d9cd32ccc 100644
--- a/pkg/crc/cluster/clusteroperator.go
+++ b/pkg/crc/cluster/clusteroperator.go
@@ -29,23 +29,23 @@ type K8sResource struct {
 }
 
 // https://github.com/openshift/cluster-version-operator/blob/master/docs/dev/clusteroperator.md#what-should-an-operator-report-with-clusteroperator-custom-resource
-type ClusterStatus struct {
+type Status struct {
 	Available   bool
 	Degraded    bool
 	Progressing bool
 	Disabled    bool
 }
 
-func GetClusterOperatorStatus(ocConfig oc.OcConfig, operator string) (*ClusterStatus, error) {
+func GetClusterOperatorStatus(ocConfig oc.Config, operator string) (*Status, error) {
 	return getStatus(ocConfig, []string{operator})
 }
 
-func GetClusterOperatorsStatus(ocConfig oc.OcConfig) (*ClusterStatus, error) {
+func GetClusterOperatorsStatus(ocConfig oc.Config) (*Status, error) {
 	return getStatus(ocConfig, []string{})
 }
 
-func getStatus(ocConfig oc.OcConfig, selector []string) (*ClusterStatus, error) {
-	cs := &ClusterStatus{
+func getStatus(ocConfig oc.Config, selector []string) (*Status, error) {
+	cs := &Status{
 		Available: true,
 	}
 
diff --git a/pkg/crc/cluster/csr.go b/pkg/crc/cluster/csr.go
index bc2778551..d9d805909 100644
--- a/pkg/crc/cluster/csr.go
+++ b/pkg/crc/cluster/csr.go
@@ -10,9 +10,9 @@ import (
 	"github.com/code-ready/crc/pkg/crc/oc"
 )
 
-func WaitForOpenshiftResource(ocConfig oc.OcConfig, resource string) error {
+func WaitForOpenshiftResource(ocConfig oc.Config, resource string) error {
 	logging.Debugf("Waiting for availability of resource type '%s'", resource)
-	waitForApiServer := func() error {
+	waitForAPIServer := func() error {
 		stdout, stderr, err := ocConfig.RunOcCommand("get", resource)
 		if err != nil {
 			logging.Debug(stderr)
@@ -21,11 +21,11 @@ func WaitForOpenshiftResource(ocConfig oc.OcConfig, resource string) error {
 		logging.Debug(stdout)
 		return nil
 	}
-	return errors.RetryAfter(80, waitForApiServer, time.Second)
+	return errors.RetryAfter(80, waitForAPIServer, time.Second)
 }
 
 // ApproveNodeCSR approves the certificate for the node.
-func ApproveNodeCSR(ocConfig oc.OcConfig) error {
+func ApproveNodeCSR(ocConfig oc.Config) error {
 	err := WaitForOpenshiftResource(ocConfig, "csr")
 	if err != nil {
 		return err
@@ -33,12 +33,12 @@ func ApproveNodeCSR(ocConfig oc.OcConfig) error {
 
 	logging.Debug("Approving pending CSRs")
 	// Execute 'oc get csr -oname' and store the output
-	csrsJson, stderr, err := ocConfig.RunOcCommand("get", "csr", "-ojson")
+	csrsJSON, stderr, err := ocConfig.RunOcCommand("get", "csr", "-ojson")
 	if err != nil {
 		return fmt.Errorf("Not able to get csr names (%v : %s)", err, stderr)
 	}
 	var csrs K8sResource
-	err = json.Unmarshal([]byte(csrsJson), &csrs)
+	err = json.Unmarshal([]byte(csrsJSON), &csrs)
 	if err != nil {
 		return err
 	}
diff --git a/pkg/crc/config/validations.go b/pkg/crc/config/validations.go
index 73ba20793..00864af13 100644
--- a/pkg/crc/config/validations.go
+++ b/pkg/crc/config/validations.go
@@ -55,8 +55,8 @@ func ValidateBundle(value interface{}) (bool, string) {
 }
 
 // ValidateIP checks if provided IP is valid
-func ValidateIpAddress(value interface{}) (bool, string) {
-	if err := validation.ValidateIpAddress(value.(string)); err != nil {
+func ValidateIPAddress(value interface{}) (bool, string) {
+	if err := validation.ValidateIPAddress(value.(string)); err != nil {
 		return false, err.Error()
 	}
 	return true, ""
diff --git a/pkg/crc/config/viper_config.go b/pkg/crc/config/viper_config.go
index 791fc2fe9..2f54c1a2e 100644
--- a/pkg/crc/config/viper_config.go
+++ b/pkg/crc/config/viper_config.go
@@ -15,7 +15,7 @@ import (
 
 type SetFn func(string, string) string
 
-type setting struct {
+type Setting struct {
 	Name          string
 	defaultValue  interface{}
 	validationFns []ValidationFnType
@@ -33,7 +33,7 @@ var (
 	// because they were changed at runtime)
 	changedConfigs map[string]interface{}
 	// allSettings holds all the config settings
-	allSettings = make(map[string]*setting)
+	allSettings = make(map[string]*Setting)
 )
 
 // GetBool returns the value of a boolean config key
@@ -165,8 +165,8 @@ func BindFlagSet(flagSet *pflag.FlagSet) error {
 
 // AddSetting returns a filled struct of ConfigSetting
 // takes the config name and default value as arguments
-func AddSetting(name string, defValue interface{}, validationFn []ValidationFnType, callbackFn []SetFn) *setting {
-	s := setting{Name: name, defaultValue: defValue, validationFns: validationFn, callbackFns: callbackFn}
+func AddSetting(name string, defValue interface{}, validationFn []ValidationFnType, callbackFn []SetFn) *Setting {
+	s := Setting{Name: name, defaultValue: defValue, validationFns: validationFn, callbackFns: callbackFn}
 	allSettings[name] = &s
 	return &s
 }
diff --git a/pkg/crc/constants/constants.go b/pkg/crc/constants/constants.go
index e5ea75872..6b477d40a 100644
--- a/pkg/crc/constants/constants.go
+++ b/pkg/crc/constants/constants.go
@@ -30,54 +30,54 @@ const (
 	CrcLandingPageURL    = "https://cloud.redhat.com/openshift/install/crc/installer-provisioned" // #nosec G101
 	PullSecretFile       = "pullsecret.json"
 
-	DefaultOcUrlBase          = "https://mirror.openshift.com/pub/openshift-v4/clients/ocp"
-	DefaultPodmanUrlBase      = "https://storage.googleapis.com/libpod-master-releases"
+	DefaultOcURLBase          = "https://mirror.openshift.com/pub/openshift-v4/clients/ocp"
+	DefaultPodmanURLBase      = "https://storage.googleapis.com/libpod-master-releases"
 	DefaultGoodhostsCliBase   = "https://github.com/code-ready/goodhosts-cli/releases/download/v1.0.0"
 	CrcTrayDownloadURL        = "https://github.com/code-ready/tray-macos/releases/download/v%s/crc-tray-macos.tar.gz"
 	CRCWindowsTrayDownloadURL = "https://github.com/code-ready/tray-windows/releases/download/v%s/crc-tray-windows.zip"
 	DefaultContext            = "admin"
 )
 
-var ocUrlForOs = map[string]string{
-	"darwin":  fmt.Sprintf("%s/%s/%s", DefaultOcUrlBase, version.GetOcVersion(), "openshift-client-mac.tar.gz"),
-	"linux":   fmt.Sprintf("%s/%s/%s", DefaultOcUrlBase, version.GetOcVersion(), "openshift-client-linux.tar.gz"),
-	"windows": fmt.Sprintf("%s/%s/%s", DefaultOcUrlBase, version.GetOcVersion(), "openshift-client-windows.zip"),
+var ocURLForOs = map[string]string{
+	"darwin":  fmt.Sprintf("%s/%s/%s", DefaultOcURLBase, version.GetOcVersion(), "openshift-client-mac.tar.gz"),
+	"linux":   fmt.Sprintf("%s/%s/%s", DefaultOcURLBase, version.GetOcVersion(), "openshift-client-linux.tar.gz"),
+	"windows": fmt.Sprintf("%s/%s/%s", DefaultOcURLBase, version.GetOcVersion(), "openshift-client-windows.zip"),
 }
 
-func GetOcUrlForOs(os string) string {
-	return ocUrlForOs[os]
+func GetOcURLForOs(os string) string {
+	return ocURLForOs[os]
 }
 
-func GetOcUrl() string {
-	return GetOcUrlForOs(runtime.GOOS)
+func GetOcURL() string {
+	return GetOcURLForOs(runtime.GOOS)
 }
 
-var podmanUrlForOs = map[string]string{
-	"darwin":  fmt.Sprintf("%s/%s", DefaultPodmanUrlBase, "podman-remote-latest-master-darwin-amd64.zip"),
-	"linux":   fmt.Sprintf("%s/%s", DefaultPodmanUrlBase, "podman-remote-latest-master-linux---amd64.zip"),
-	"windows": fmt.Sprintf("%s/%s", DefaultPodmanUrlBase, "podman-remote-latest-master-windows-amd64.zip"),
+var podmanURLForOs = map[string]string{
+	"darwin":  fmt.Sprintf("%s/%s", DefaultPodmanURLBase, "podman-remote-latest-master-darwin-amd64.zip"),
+	"linux":   fmt.Sprintf("%s/%s", DefaultPodmanURLBase, "podman-remote-latest-master-linux---amd64.zip"),
+	"windows": fmt.Sprintf("%s/%s", DefaultPodmanURLBase, "podman-remote-latest-master-windows-amd64.zip"),
 }
 
-func GetPodmanUrlForOs(os string) string {
-	return podmanUrlForOs[os]
+func GetPodmanURLForOs(os string) string {
+	return podmanURLForOs[os]
 }
 
-func GetPodmanUrl() string {
-	return podmanUrlForOs[runtime.GOOS]
+func GetPodmanURL() string {
+	return podmanURLForOs[runtime.GOOS]
 }
 
-var goodhostsUrlForOs = map[string]string{
+var goodhostsURLForOs = map[string]string{
 	"darwin":  fmt.Sprintf("%s/%s", DefaultGoodhostsCliBase, "goodhosts-cli-macos-amd64.tar.xz"),
 	"linux":   fmt.Sprintf("%s/%s", DefaultGoodhostsCliBase, "goodhosts-cli-linux-amd64.tar.xz"),
 	"windows": fmt.Sprintf("%s/%s", DefaultGoodhostsCliBase, "goodhosts-cli-windows-amd64.tar.xz"),
 }
 
-func GetGoodhostsUrlForOs(os string) string {
-	return goodhostsUrlForOs[os]
+func GetGoodhostsURLForOs(os string) string {
+	return goodhostsURLForOs[os]
 }
 
-func GetGoodhostsUrl() string {
-	return goodhostsUrlForOs[runtime.GOOS]
+func GetGoodhostsURL() string {
+	return goodhostsURLForOs[runtime.GOOS]
 }
 
 var defaultBundleForOs = map[string]string{
diff --git a/pkg/crc/machine/driver.go b/pkg/crc/machine/driver.go
index c50db085d..276bd6211 100644
--- a/pkg/crc/machine/driver.go
+++ b/pkg/crc/machine/driver.go
@@ -4,7 +4,7 @@ import (
 	crcos "github.com/code-ready/crc/pkg/os"
 )
 
-type MachineDriver struct {
+type Driver struct {
 	Name       string
 	Platform   crcos.OS
 	Driver     string
@@ -12,8 +12,8 @@ type MachineDriver struct {
 }
 
 var (
-	SupportedDrivers []MachineDriver
-	DefaultDriver    MachineDriver
+	SupportedDrivers []Driver
+	DefaultDriver    Driver
 )
 
 func SupportedDriverValues() []string {
diff --git a/pkg/crc/machine/driver_darwin.go b/pkg/crc/machine/driver_darwin.go
index 59cc99a4d..547ea8f3e 100644
--- a/pkg/crc/machine/driver_darwin.go
+++ b/pkg/crc/machine/driver_darwin.go
@@ -10,14 +10,14 @@ import (
 )
 
 func init() {
-	HyperkitDriver := MachineDriver{
+	HyperkitDriver := Driver{
 		Name:       "Hyperkit",
 		Platform:   crcos.DARWIN,
 		Driver:     "hyperkit",
 		DriverPath: constants.CrcBinDir,
 	}
 
-	SupportedDrivers = []MachineDriver{
+	SupportedDrivers = []Driver{
 		HyperkitDriver,
 	}
 
diff --git a/pkg/crc/machine/driver_linux.go b/pkg/crc/machine/driver_linux.go
index 7c2bf74e3..16eceb84c 100644
--- a/pkg/crc/machine/driver_linux.go
+++ b/pkg/crc/machine/driver_linux.go
@@ -10,14 +10,14 @@ import (
 )
 
 func init() {
-	LibvirtDriver := MachineDriver{
+	LibvirtDriver := Driver{
 		Name:       "Libvirt",
 		Platform:   crcos.LINUX,
 		Driver:     "libvirt",
 		DriverPath: constants.CrcBinDir,
 	}
 
-	SupportedDrivers = []MachineDriver{
+	SupportedDrivers = []Driver{
 		LibvirtDriver,
 	}
 
diff --git a/pkg/crc/machine/driver_windows.go b/pkg/crc/machine/driver_windows.go
index 571ec93ca..be877a101 100644
--- a/pkg/crc/machine/driver_windows.go
+++ b/pkg/crc/machine/driver_windows.go
@@ -9,13 +9,13 @@ import (
 )
 
 func init() {
-	HyperVDriver := MachineDriver{
+	HyperVDriver := Driver{
 		Name:     "Microsoft Hyper-V",
 		Platform: crcos.WINDOWS,
 		Driver:   "hyperv",
 	}
 
-	SupportedDrivers = []MachineDriver{
+	SupportedDrivers = []Driver{
 		HyperVDriver,
 	}
 
diff --git a/pkg/crc/machine/hyperkit/constants.go b/pkg/crc/machine/hyperkit/constants.go
index 57598a2b4..d2ccadd7d 100644
--- a/pkg/crc/machine/hyperkit/constants.go
+++ b/pkg/crc/machine/hyperkit/constants.go
@@ -11,6 +11,6 @@ const (
 )
 
 var (
-	HyperkitDownloadUrl      = fmt.Sprintf("https://github.com/code-ready/machine-driver-hyperkit/releases/download/v%s/hyperkit", MachineDriverVersion)
-	MachineDriverDownloadUrl = fmt.Sprintf("https://github.com/code-ready/machine-driver-hyperkit/releases/download/v%s/crc-driver-hyperkit", MachineDriverVersion)
+	HyperkitDownloadURL      = fmt.Sprintf("https://github.com/code-ready/machine-driver-hyperkit/releases/download/v%s/hyperkit", MachineDriverVersion)
+	MachineDriverDownloadURL = fmt.Sprintf("https://github.com/code-ready/machine-driver-hyperkit/releases/download/v%s/crc-driver-hyperkit", MachineDriverVersion)
 )
diff --git a/pkg/crc/machine/hyperkit/driver_darwin.go b/pkg/crc/machine/hyperkit/driver_darwin.go
index 2547e2a94..0ad939e88 100644
--- a/pkg/crc/machine/hyperkit/driver_darwin.go
+++ b/pkg/crc/machine/hyperkit/driver_darwin.go
@@ -8,7 +8,7 @@ import (
 	"github.com/code-ready/machine/libmachine/drivers"
 )
 
-type hyperkitDriver struct {
+type Driver struct {
 	*drivers.BaseDriver
 	CPU           int
 	Memory        int
@@ -19,13 +19,13 @@ type hyperkitDriver struct {
 	VmlinuzPath   string
 	InitrdPath    string
 	KernelCmdLine string
-	DiskPathUrl   string
+	DiskPathURL   string
 	SSHKeyPath    string
 	HyperKitPath  string
 }
 
-func CreateHost(config config.MachineConfig) *hyperkitDriver {
-	d := &hyperkitDriver{
+func CreateHost(config config.MachineConfig) *Driver {
+	d := &Driver{
 		BaseDriver: &drivers.BaseDriver{
 			MachineName: config.Name,
 			StorePath:   constants.MachineBaseDir,
@@ -38,7 +38,7 @@ func CreateHost(config config.MachineConfig) *hyperkitDriver {
 		Cmdline:     config.KernelCmdLine,
 		VmlinuzPath: config.Kernel,
 		InitrdPath:  config.Initramfs,
-		DiskPathUrl: config.DiskPathURL,
+		DiskPathURL: config.DiskPathURL,
 		SSHKeyPath:  config.SSHKeyPath,
 	}
 	d.HyperKitPath = filepath.Join(constants.CrcBinDir, "hyperkit")
diff --git a/pkg/crc/machine/libvirt/constants.go b/pkg/crc/machine/libvirt/constants.go
index a3b5807bd..fea469bc6 100644
--- a/pkg/crc/machine/libvirt/constants.go
+++ b/pkg/crc/machine/libvirt/constants.go
@@ -21,5 +21,5 @@ const (
 )
 
 var (
-	MachineDriverDownloadUrl = fmt.Sprintf("https://github.com/code-ready/machine-driver-libvirt/releases/download/%s/crc-driver-libvirt", MachineDriverVersion)
+	MachineDriverDownloadURL = fmt.Sprintf("https://github.com/code-ready/machine-driver-libvirt/releases/download/%s/crc-driver-libvirt", MachineDriverVersion)
 )
diff --git a/pkg/crc/machine/libvirt/driver_linux.go b/pkg/crc/machine/libvirt/driver_linux.go
index a2ba3f9eb..b4a910de6 100644
--- a/pkg/crc/machine/libvirt/driver_linux.go
+++ b/pkg/crc/machine/libvirt/driver_linux.go
@@ -8,7 +8,7 @@ import (
 	"github.com/code-ready/machine/libmachine/drivers"
 )
 
-type libvirtDriver struct {
+type Driver struct {
 	*drivers.BaseDriver
 
 	// Driver specific configuration
@@ -18,12 +18,12 @@ type libvirtDriver struct {
 	DiskPath    string
 	CacheMode   string
 	IOMode      string
-	DiskPathUrl string
+	DiskPathURL string
 	SSHKeyPath  string
 }
 
-func CreateHost(machineConfig config.MachineConfig) *libvirtDriver {
-	return &libvirtDriver{
+func CreateHost(machineConfig config.MachineConfig) *Driver {
+	return &Driver{
 		BaseDriver: &drivers.BaseDriver{
 			MachineName: machineConfig.Name,
 			StorePath:   constants.MachineBaseDir,
@@ -37,7 +37,7 @@ func CreateHost(machineConfig config.MachineConfig) *libvirtDriver {
 		IOMode:    DefaultIOMode,
 		// This force to add entry of DiskPath under crc machine config.json
 		DiskPath:    filepath.Join(constants.MachineBaseDir, "machines", machineConfig.Name, constants.DefaultName),
-		DiskPathUrl: machineConfig.DiskPathURL,
+		DiskPathURL: machineConfig.DiskPathURL,
 		SSHKeyPath:  machineConfig.SSHKeyPath,
 	}
 }
diff --git a/pkg/crc/machine/machine.go b/pkg/crc/machine/machine.go
index 35c3b8f87..0a276ad9c 100644
--- a/pkg/crc/machine/machine.go
+++ b/pkg/crc/machine/machine.go
@@ -114,7 +114,7 @@ func Start(startConfig StartConfig) (StartResult, error) {
 	var privateKeyPath string
 	var pullSecret string
 	driverInfo := DefaultDriver
-	exists, err := MachineExists(startConfig.Name)
+	exists, err := Exists(startConfig.Name)
 	if !exists {
 		machineConfig := config.MachineConfig{
 			Name:       startConfig.Name,
@@ -205,21 +205,21 @@ func Start(startConfig StartConfig) (StartResult, error) {
 			}
 			result.Status = vmState.String()
 			return *result, nil
+		}
+
+		openshiftVersion := crcBundleMetadata.GetOpenshiftVersion()
+		if openshiftVersion == "" {
+			logging.Info("Starting CodeReady Containers VM ...")
 		} else {
-			openshiftVersion := crcBundleMetadata.GetOpenshiftVersion()
-			if openshiftVersion == "" {
-				logging.Info("Starting CodeReady Containers VM ...")
-			} else {
-				logging.Infof("Starting CodeReady Containers VM for OpenShift %s...", openshiftVersion)
-			}
-			if err := host.Driver.Start(); err != nil {
-				result.Error = err.Error()
-				return *result, errors.Newf("Error starting stopped VM: %v", err)
-			}
-			if err := libMachineAPIClient.Save(host); err != nil {
-				result.Error = err.Error()
-				return *result, errors.Newf("Error saving state for VM: %v", err)
-			}
+			logging.Infof("Starting CodeReady Containers VM for OpenShift %s...", openshiftVersion)
+		}
+		if err := host.Driver.Start(); err != nil {
+			result.Error = err.Error()
+			return *result, errors.Newf("Error starting stopped VM: %v", err)
+		}
+		if err := libMachineAPIClient.Save(host); err != nil {
+			result.Error = err.Error()
+			return *result, errors.Newf("Error saving state for VM: %v", err)
 		}
 
 		vmState, err = host.Driver.GetState()
@@ -247,7 +247,7 @@ func Start(startConfig StartConfig) (StartResult, error) {
 	sshRunner := crcssh.CreateRunnerWithPrivateKey(host.Driver, privateKeyPath)
 
 	logging.Debug("Waiting until ssh is available")
-	if err := cluster.WaitForSsh(sshRunner); err != nil {
+	if err := cluster.WaitForSSH(sshRunner); err != nil {
 		result.Error = err.Error()
 		return *result, errors.New("Failed to connect to the CRC VM with SSH -- host might be unreachable")
 	}
@@ -415,7 +415,7 @@ func Start(startConfig StartConfig) (StartResult, error) {
 			return *result, errors.New(err.Error())
 		}
 
-		if err := cluster.DeleteOpenshiftApiServerPods(ocConfig); err != nil {
+		if err := cluster.DeleteOpenshiftAPIServerPods(ocConfig); err != nil {
 			result.Error = err.Error()
 			return *result, errors.New(err.Error())
 		}
@@ -533,8 +533,8 @@ func Delete(deleteConfig DeleteConfig) (DeleteResult, error) {
 	return *result, nil
 }
 
-func Ip(ipConfig IpConfig) (IpResult, error) {
-	result := &IpResult{Name: ipConfig.Name, Success: true}
+func IP(ipConfig IPConfig) (IPResult, error) {
+	result := &IPResult{Name: ipConfig.Name, Success: true}
 
 	err := setMachineLogging(ipConfig.Debug)
 	if err != nil {
@@ -634,7 +634,7 @@ func Status(statusConfig ClusterStatusConfig) (ClusterStatusResult, error) {
 	return *result, nil
 }
 
-func MachineExists(name string) (bool, error) {
+func Exists(name string) (bool, error) {
 	libMachineAPIClient := libmachine.NewClient(constants.MachineBaseDir, constants.MachineCertsDir)
 	defer libMachineAPIClient.Close()
 	exists, err := libMachineAPIClient.Exists(name)
@@ -683,7 +683,7 @@ func unsetMachineLogging() {
 	logging.CloseLogFile()
 }
 
-func addNameServerToInstance(sshRunner *crcssh.SSHRunner, ns string) error {
+func addNameServerToInstance(sshRunner *crcssh.Runner, ns string) error {
 	nameserver := network.NameServer{IPAddress: ns}
 	nameservers := []network.NameServer{nameserver}
 	exist, err := network.HasGivenNameserversConfigured(sshRunner, nameserver)
@@ -761,7 +761,7 @@ func GetConsoleURL(consoleConfig ConsoleConfig) (ConsoleResult, error) {
 	return *result, nil
 }
 
-func updateSSHKeyPair(sshRunner *crcssh.SSHRunner) error {
+func updateSSHKeyPair(sshRunner *crcssh.Runner) error {
 	// Generate ssh key pair
 	if err := ssh.GenerateSSHKey(constants.GetPrivateKeyPath()); err != nil {
 		return fmt.Errorf("Error generating ssh key pair: %v", err)
@@ -782,7 +782,7 @@ func updateSSHKeyPair(sshRunner *crcssh.SSHRunner) error {
 	return err
 }
 
-func configureCluster(ocConfig oc.OcConfig, sshRunner *crcssh.SSHRunner, proxyConfig *network.ProxyConfig, pullSecret, instanceIP string) (rerr error) {
+func configureCluster(ocConfig oc.Config, sshRunner *crcssh.Runner, proxyConfig *network.ProxyConfig, pullSecret, instanceIP string) (rerr error) {
 	sd := systemd.NewInstanceSystemdCommander(sshRunner)
 
 	if err := configProxyForCluster(ocConfig, sshRunner, sd, proxyConfig, instanceIP); err != nil {
@@ -813,7 +813,7 @@ func getProxyConfig(baseDomainName string) (*network.ProxyConfig, error) {
 	return proxy, nil
 }
 
-func configProxyForCluster(ocConfig oc.OcConfig, sshRunner *crcssh.SSHRunner, sd *systemd.InstanceSystemdCommander,
+func configProxyForCluster(ocConfig oc.Config, sshRunner *crcssh.Runner, sd *systemd.InstanceSystemdCommander,
 	proxy *network.ProxyConfig, instanceIP string) (err error) {
 	if !proxy.IsEnabled() {
 		return nil
@@ -847,7 +847,7 @@ func configProxyForCluster(ocConfig oc.OcConfig, sshRunner *crcssh.SSHRunner, sd
 	return nil
 }
 
-func waitForProxyPropagation(ocConfig oc.OcConfig, proxyConfig *network.ProxyConfig) {
+func waitForProxyPropagation(ocConfig oc.Config, proxyConfig *network.ProxyConfig) {
 	checkProxySettingsForOperator := func() error {
 		proxySet, err := cluster.CheckProxySettingsForOperator(ocConfig, proxyConfig, "redhat-operators", "openshift-marketplace")
 		if err != nil {
diff --git a/pkg/crc/machine/types.go b/pkg/crc/machine/types.go
index f7fc3fabc..5efd74291 100644
--- a/pkg/crc/machine/types.go
+++ b/pkg/crc/machine/types.go
@@ -75,12 +75,12 @@ type DeleteResult struct {
 	Error   string
 }
 
-type IpConfig struct {
+type IPConfig struct {
 	Name  string
 	Debug bool
 }
 
-type IpResult struct {
+type IPResult struct {
 	Name    string
 	IP      string
 	Success bool
diff --git a/pkg/crc/network/nameservers.go b/pkg/crc/network/nameservers.go
index 421e0593c..94f53bd4d 100644
--- a/pkg/crc/network/nameservers.go
+++ b/pkg/crc/network/nameservers.go
@@ -10,7 +10,7 @@ import (
 )
 
 // HasGivenNameserversConfigured returns true if the instance uses a provided nameserver.
-func HasGivenNameserversConfigured(sshRunner *ssh.SSHRunner, nameserver NameServer) (bool, error) {
+func HasGivenNameserversConfigured(sshRunner *ssh.Runner, nameserver NameServer) (bool, error) {
 	cmd := "cat /etc/resolv.conf"
 	out, err := sshRunner.Run(cmd)
 
@@ -21,7 +21,7 @@ func HasGivenNameserversConfigured(sshRunner *ssh.SSHRunner, nameserver NameServ
 	return strings.Contains(out, nameserver.IPAddress), nil
 }
 
-func GetResolvValuesFromInstance(sshRunner *ssh.SSHRunner) (*ResolvFileValues, error) {
+func GetResolvValuesFromInstance(sshRunner *ssh.Runner) (*ResolvFileValues, error) {
 	cmd := "cat /etc/resolv.conf"
 	out, err := sshRunner.Run(cmd)
 
@@ -32,7 +32,7 @@ func GetResolvValuesFromInstance(sshRunner *ssh.SSHRunner) (*ResolvFileValues, e
 	return parseResolveConfFile(out)
 }
 
-func CreateResolvFileOnInstance(sshRunner *ssh.SSHRunner, resolvFileValues ResolvFileValues) {
+func CreateResolvFileOnInstance(sshRunner *ssh.Runner, resolvFileValues ResolvFileValues) {
 	resolvFile, _ := CreateResolvFile(resolvFileValues)
 
 	err := sshRunner.CopyData([]byte(resolvFile), "/etc/resolv.conf")
@@ -43,14 +43,14 @@ func CreateResolvFileOnInstance(sshRunner *ssh.SSHRunner, resolvFileValues Resol
 
 // AddNameserversToInstance will add additional nameservers to the end of the
 // /etc/resolv.conf file inside the instance.
-func AddNameserversToInstance(sshRunner *ssh.SSHRunner, nameservers []NameServer) {
+func AddNameserversToInstance(sshRunner *ssh.Runner, nameservers []NameServer) {
 	for _, ns := range nameservers {
 		addNameserverToInstance(sshRunner, ns)
 	}
 }
 
 // writes nameserver to the /etc/resolv.conf inside the instance
-func addNameserverToInstance(sshRunner *ssh.SSHRunner, nameserver NameServer) {
+func addNameserverToInstance(sshRunner *ssh.Runner, nameserver NameServer) {
 	executeCommandOrExit(sshRunner,
 		fmt.Sprintf("NS=%s; cat /etc/resolv.conf |grep -i \"^nameserver $NS\" || echo \"nameserver $NS\" | sudo tee -a /etc/resolv.conf", nameserver.IPAddress),
 		"Error adding nameserver")
diff --git a/pkg/crc/network/proxy.go b/pkg/crc/network/proxy.go
index 5f209e9ad..f2b62771a 100644
--- a/pkg/crc/network/proxy.go
+++ b/pkg/crc/network/proxy.go
@@ -15,22 +15,22 @@ var (
 
 // ProxyConfig keeps the proxy configuration for the current environment
 type ProxyConfig struct {
-	HttpProxy  string
-	HttpsProxy string
+	HTTPProxy  string
+	HTTPSProxy string
 	noProxy    []string
 }
 
 func NewProxyDefaults(httpProxy, httpsProxy, noProxy string) (*ProxyConfig, error) {
 	DefaultProxy = ProxyConfig{
-		HttpProxy:  httpProxy,
-		HttpsProxy: httpsProxy,
+		HTTPProxy:  httpProxy,
+		HTTPSProxy: httpsProxy,
 	}
 
-	if DefaultProxy.HttpProxy == "" {
-		DefaultProxy.HttpProxy = getProxyFromEnv("http_proxy")
+	if DefaultProxy.HTTPProxy == "" {
+		DefaultProxy.HTTPProxy = getProxyFromEnv("http_proxy")
 	}
-	if DefaultProxy.HttpsProxy == "" {
-		DefaultProxy.HttpsProxy = getProxyFromEnv("https_proxy")
+	if DefaultProxy.HTTPSProxy == "" {
+		DefaultProxy.HTTPSProxy = getProxyFromEnv("https_proxy")
 	}
 	if noProxy == "" {
 		noProxy = getProxyFromEnv("no_proxy")
@@ -44,8 +44,8 @@ func NewProxyDefaults(httpProxy, httpsProxy, noProxy string) (*ProxyConfig, erro
 // the corresponding environment variable is checked.
 func NewProxyConfig() (*ProxyConfig, error) {
 	config := ProxyConfig{
-		HttpProxy:  DefaultProxy.HttpProxy,
-		HttpsProxy: DefaultProxy.HttpsProxy,
+		HTTPProxy:  DefaultProxy.HTTPProxy,
+		HTTPSProxy: DefaultProxy.HTTPSProxy,
 	}
 
 	config.noProxy = defaultNoProxies
@@ -53,12 +53,12 @@ func NewProxyConfig() (*ProxyConfig, error) {
 		config.AddNoProxy(DefaultProxy.noProxy...)
 	}
 
-	err := ValidateProxyURL(config.HttpProxy)
+	err := ValidateProxyURL(config.HTTPProxy)
 	if err != nil {
 		return nil, err
 	}
 
-	err = ValidateProxyURL(config.HttpsProxy)
+	err = ValidateProxyURL(config.HTTPSProxy)
 	if err != nil {
 		return nil, err
 	}
@@ -74,15 +74,15 @@ func getProxyFromEnv(proxyScheme string) string {
 	return p
 }
 
-// HttpProxy with hidden credentials
-func (p *ProxyConfig) HttpProxyForDisplay() string {
-	httpProxy, _ := UriStringForDisplay(p.HttpProxy)
+// HTTPProxy with hidden credentials
+func (p *ProxyConfig) HTTPProxyForDisplay() string {
+	httpProxy, _ := URIStringForDisplay(p.HTTPProxy)
 	return httpProxy
 }
 
-// HttpsProxy with hidden credentials
-func (p *ProxyConfig) HttpsProxyForDisplay() string {
-	httpsProxy, _ := UriStringForDisplay(p.HttpsProxy)
+// HTTPSProxy with hidden credentials
+func (p *ProxyConfig) HTTPSProxyForDisplay() string {
+	httpsProxy, _ := URIStringForDisplay(p.HTTPSProxy)
 	return httpsProxy
 }
 
@@ -108,13 +108,13 @@ func (p *ProxyConfig) ApplyToEnvironment() {
 		return
 	}
 
-	if p.HttpProxy != "" {
-		os.Setenv("HTTP_PROXY", p.HttpProxy)
-		os.Setenv("http_proxy", p.HttpProxy)
+	if p.HTTPProxy != "" {
+		os.Setenv("HTTP_PROXY", p.HTTPProxy)
+		os.Setenv("http_proxy", p.HTTPProxy)
 	}
-	if p.HttpsProxy != "" {
-		os.Setenv("HTTPS_PROXY", p.HttpsProxy)
-		os.Setenv("https_proxy", p.HttpsProxy)
+	if p.HTTPSProxy != "" {
+		os.Setenv("HTTPS_PROXY", p.HTTPSProxy)
+		os.Setenv("https_proxy", p.HTTPSProxy)
 	}
 	if len(p.noProxy) != 0 {
 		os.Setenv("NO_PROXY", p.GetNoProxyString())
@@ -124,23 +124,23 @@ func (p *ProxyConfig) ApplyToEnvironment() {
 
 // Enabled returns true if at least one proxy (HTTP or HTTPS) is configured. Returns false otherwise.
 func (p *ProxyConfig) IsEnabled() bool {
-	return p.HttpProxy != "" || p.HttpsProxy != ""
+	return p.HTTPProxy != "" || p.HTTPSProxy != ""
 }
 
 // ValidateProxyURL validates that the specified proxyURL is valid
-func ValidateProxyURL(proxyUrl string) error {
-	if proxyUrl == "" {
+func ValidateProxyURL(proxyURL string) error {
+	if proxyURL == "" {
 		return nil
 	}
 
-	if strings.HasPrefix(proxyUrl, "https://") {
-		return fmt.Errorf("Proxy URL '%s' is not valid: https is not supported", proxyUrl)
+	if strings.HasPrefix(proxyURL, "https://") {
+		return fmt.Errorf("Proxy URL '%s' is not valid: https is not supported", proxyURL)
 	}
-	if !strings.HasPrefix(proxyUrl, "http://") {
-		return fmt.Errorf("Proxy URL '%s' is not valid: url should start with http://", proxyUrl)
+	if !strings.HasPrefix(proxyURL, "http://") {
+		return fmt.Errorf("Proxy URL '%s' is not valid: url should start with http://", proxyURL)
 	}
-	if !govalidator.IsURL(proxyUrl) {
-		return fmt.Errorf("Proxy URL '%s' is not valid.", proxyUrl)
+	if !govalidator.IsURL(proxyURL) {
+		return fmt.Errorf("Proxy URL '%s' is not valid", proxyURL)
 	}
 	return nil
 }
diff --git a/pkg/crc/network/utils.go b/pkg/crc/network/utils.go
index 9674afa6c..3394436a0 100644
--- a/pkg/crc/network/utils.go
+++ b/pkg/crc/network/utils.go
@@ -13,7 +13,7 @@ import (
 	crcos "github.com/code-ready/crc/pkg/os"
 )
 
-func executeCommandOrExit(sshRunner *ssh.SSHRunner, command string, errorMessage string) string {
+func executeCommandOrExit(sshRunner *ssh.Runner, command string, errorMessage string) string {
 	result, err := sshRunner.Run(command)
 
 	if err != nil {
@@ -22,8 +22,8 @@ func executeCommandOrExit(sshRunner *ssh.SSHRunner, command string, errorMessage
 	return result
 }
 
-// NetworkContains returns true if the IP address belongs to the network given
-func NetworkContains(network string, ip string) bool {
+// Contains returns true if the IP address belongs to the network given
+func Contains(network string, ip string) bool {
 	_, ipnet, _ := net.ParseCIDR(network)
 	address := net.ParseIP(ip)
 	return ipnet.Contains(address)
@@ -71,7 +71,7 @@ func HostIPs() []string {
 func DetermineHostIP(instanceIP string) (string, error) {
 	for _, hostaddr := range HostIPs() {
 
-		if NetworkContains(hostaddr, instanceIP) {
+		if Contains(hostaddr, instanceIP) {
 			hostip, _, _ := net.ParseCIDR(hostaddr)
 			// This step is not working with Windows + VirtualBox as of now
 			// This test is required for CIFS mount-folder case.
@@ -86,7 +86,7 @@ func DetermineHostIP(instanceIP string) (string, error) {
 	return "", errors.New("unknown error occurred")
 }
 
-func UriStringForDisplay(uri string) (string, error) {
+func URIStringForDisplay(uri string) (string, error) {
 	u, err := url.Parse(uri)
 	if err != nil {
 		return "", err
diff --git a/pkg/crc/oc/oc.go b/pkg/crc/oc/oc.go
index b1fa70ce5..7c433a792 100644
--- a/pkg/crc/oc/oc.go
+++ b/pkg/crc/oc/oc.go
@@ -7,63 +7,63 @@ import (
 	crcos "github.com/code-ready/crc/pkg/os"
 )
 
-type OcRunner interface {
+type Runner interface {
 	Run(args ...string) (string, string, error)
 	RunPrivate(args ...string) (string, string, error)
 }
 
-type OcConfig struct {
-	Runner  OcRunner
+type Config struct {
+	Runner  Runner
 	Context string
 	Cluster string
 }
 
-type OcLocalRunner struct {
+type LocalRunner struct {
 	OcBinaryPath   string
 	KubeconfigPath string
 }
 
-func (oc OcLocalRunner) Run(args ...string) (string, string, error) {
+func (oc LocalRunner) Run(args ...string) (string, string, error) {
 	args = append(args, "--kubeconfig", oc.KubeconfigPath)
 	return crcos.RunWithDefaultLocale(oc.OcBinaryPath, args...)
 }
 
-func (oc OcLocalRunner) RunPrivate(args ...string) (string, string, error) {
+func (oc LocalRunner) RunPrivate(args ...string) (string, string, error) {
 	args = append(args, "--kubeconfig", oc.KubeconfigPath)
 	return crcos.RunWithDefaultLocalePrivate(oc.OcBinaryPath, args...)
 }
 
-type OcEnvRunner struct {
+type EnvRunner struct {
 	OcBinaryPath  string
 	KubeconfigEnv string
 }
 
-func (oc OcEnvRunner) Run(args ...string) (string, string, error) {
+func (oc EnvRunner) Run(args ...string) (string, string, error) {
 	return crcos.RunWithDefaultLocaleAndEnv(oc.OcBinaryPath, args, map[string]string{
 		"KUBECONFIG": oc.KubeconfigEnv,
 	})
 }
 
-func (oc OcEnvRunner) RunPrivate(args ...string) (string, string, error) {
+func (oc EnvRunner) RunPrivate(args ...string) (string, string, error) {
 	return crcos.RunWithDefaultLocalePrivateAndEnv(oc.OcBinaryPath, args, map[string]string{
 		"KUBECONFIG": oc.KubeconfigEnv,
 	})
 }
 
 // UseOcWithConfig return the oc binary along with valid kubeconfig
-func UseOCWithConfig(machineName string) OcConfig {
-	localRunner := OcLocalRunner{
+func UseOCWithConfig(machineName string) Config {
+	localRunner := LocalRunner{
 		OcBinaryPath:   filepath.Join(constants.CrcOcBinDir, constants.OcBinaryName),
 		KubeconfigPath: filepath.Join(constants.MachineInstanceDir, machineName, "kubeconfig"),
 	}
-	return OcConfig{
+	return Config{
 		Runner:  localRunner,
 		Context: constants.DefaultContext,
 		Cluster: constants.DefaultName,
 	}
 }
 
-func (oc OcConfig) RunOcCommand(args ...string) (string, string, error) {
+func (oc Config) RunOcCommand(args ...string) (string, string, error) {
 	if oc.Context != "" {
 		args = append(args, "--context", oc.Context)
 	}
@@ -73,7 +73,7 @@ func (oc OcConfig) RunOcCommand(args ...string) (string, string, error) {
 	return oc.Runner.Run(args...)
 }
 
-func (oc OcConfig) RunOcCommandPrivate(args ...string) (string, string, error) {
+func (oc Config) RunOcCommandPrivate(args ...string) (string, string, error) {
 	if oc.Context != "" {
 		args = append(args, "--context", oc.Context)
 	}
diff --git a/pkg/crc/preflight/preflight.go b/pkg/crc/preflight/preflight.go
index e817e8739..a04948040 100644
--- a/pkg/crc/preflight/preflight.go
+++ b/pkg/crc/preflight/preflight.go
@@ -8,64 +8,64 @@ import (
 	"github.com/code-ready/crc/pkg/crc/logging"
 )
 
-type PreflightCheckFlags uint32
+type Flags uint32
 
-// Enables the use of experimental features
+// EnableExperimentalFeatures enables the use of experimental features
 var EnableExperimentalFeatures bool
 
 const (
 	// Indicates a PreflightCheck should only be run as part of "crc setup"
-	SetupOnly PreflightCheckFlags = 1 << iota
+	SetupOnly Flags = 1 << iota
 	// Indicates a PreflightCheck should only be run as part of "crc start"
 	StartOnly
 	NoFix
 	CleanUpOnly
 )
 
-type PreflightCheckFunc func() error
-type PreflightFixFunc func() error
-type PreflightCleanUpFunc func() error
+type CheckFunc func() error
+type FixFunc func() error
+type CleanUpFunc func() error
 
-type PreflightCheck struct {
+type Check struct {
 	configKeySuffix    string
 	checkDescription   string
-	check              PreflightCheckFunc
+	check              CheckFunc
 	fixDescription     string
-	fix                PreflightFixFunc
-	flags              PreflightCheckFlags
+	fix                FixFunc
+	flags              Flags
 	cleanupDescription string
-	cleanup            PreflightCleanUpFunc
+	cleanup            CleanUpFunc
 }
 
-func (check *PreflightCheck) getSkipConfigName() string {
+func (check *Check) getSkipConfigName() string {
 	if check.configKeySuffix == "" {
 		return ""
 	}
 	return "skip-" + check.configKeySuffix
 }
 
-func (check *PreflightCheck) shouldSkip() bool {
+func (check *Check) shouldSkip() bool {
 	if check.configKeySuffix == "" {
 		return false
 	}
 	return cfg.GetBool(check.getSkipConfigName())
 }
 
-func (check *PreflightCheck) getWarnConfigName() string {
+func (check *Check) getWarnConfigName() string {
 	if check.configKeySuffix == "" {
 		return ""
 	}
 	return "warn-" + check.configKeySuffix
 }
 
-func (check *PreflightCheck) shouldWarn() bool {
+func (check *Check) shouldWarn() bool {
 	if check.configKeySuffix == "" {
 		return false
 	}
 	return cfg.GetBool(check.getWarnConfigName())
 }
 
-func (check *PreflightCheck) doCheck() error {
+func (check *Check) doCheck() error {
 	if check.checkDescription == "" {
 		panic(fmt.Sprintf("Should not happen, empty description for check '%s'", check.configKeySuffix))
 	} else {
@@ -83,7 +83,7 @@ func (check *PreflightCheck) doCheck() error {
 	return err
 }
 
-func (check *PreflightCheck) doFix() error {
+func (check *Check) doFix() error {
 	if check.fixDescription == "" {
 		panic(fmt.Sprintf("Should not happen, empty description for fix '%s'", check.configKeySuffix))
 	}
@@ -96,7 +96,7 @@ func (check *PreflightCheck) doFix() error {
 	return check.fix()
 }
 
-func (check *PreflightCheck) doCleanUp() error {
+func (check *Check) doCleanUp() error {
 	if check.cleanupDescription == "" {
 		panic(fmt.Sprintf("Should not happen, empty description for cleanup '%s'", check.configKeySuffix))
 	}
@@ -106,7 +106,7 @@ func (check *PreflightCheck) doCleanUp() error {
 	return check.cleanup()
 }
 
-func doPreflightChecks(checks []PreflightCheck) {
+func doPreflightChecks(checks []Check) {
 	for _, check := range checks {
 		if check.flags&SetupOnly == SetupOnly || check.flags&CleanUpOnly == CleanUpOnly {
 			continue
@@ -122,7 +122,7 @@ func doPreflightChecks(checks []PreflightCheck) {
 	}
 }
 
-func doFixPreflightChecks(checks []PreflightCheck) {
+func doFixPreflightChecks(checks []Check) {
 	for _, check := range checks {
 		if check.flags&StartOnly == StartOnly || check.flags&CleanUpOnly == CleanUpOnly {
 			continue
@@ -142,7 +142,7 @@ func doFixPreflightChecks(checks []PreflightCheck) {
 	}
 }
 
-func doCleanUpPreflightChecks(checks []PreflightCheck) {
+func doCleanUpPreflightChecks(checks []Check) {
 	// Do the cleanup in reverse order to avoid any dependency during cleanup
 	for i := len(checks) - 1; i >= 0; i-- {
 		check := checks[i]
@@ -156,7 +156,7 @@ func doCleanUpPreflightChecks(checks []PreflightCheck) {
 	}
 }
 
-func doRegisterSettings(checks []PreflightCheck) {
+func doRegisterSettings(checks []Check) {
 	for _, check := range checks {
 		if check.configKeySuffix != "" {
 			cfg.AddSetting(check.getSkipConfigName(), false, []cfg.ValidationFnType{cfg.ValidateBool}, []cfg.SetFn{cfg.SuccessfullyApplied})
diff --git a/pkg/crc/preflight/preflight_checks_common.go b/pkg/crc/preflight/preflight_checks_common.go
index b8bba20bc..8fa2ebce7 100644
--- a/pkg/crc/preflight/preflight_checks_common.go
+++ b/pkg/crc/preflight/preflight_checks_common.go
@@ -10,12 +10,14 @@ import (
 	"github.com/code-ready/crc/pkg/crc/cache"
 	"github.com/code-ready/crc/pkg/crc/constants"
 	"github.com/code-ready/crc/pkg/crc/logging"
+	"github.com/code-ready/crc/pkg/crc/validation"
 	"github.com/code-ready/crc/pkg/crc/version"
 	"github.com/code-ready/crc/pkg/embed"
 	crcos "github.com/code-ready/crc/pkg/os"
+	"github.com/docker/go-units"
 )
 
-var genericPreflightChecks = [...]PreflightCheck{
+var genericPreflightChecks = [...]Check{
 	{
 		checkDescription: "Checking if oc binary is cached",
 		check:            checkOcBinaryCached,
@@ -43,6 +45,15 @@ var genericPreflightChecks = [...]PreflightCheck{
 		fix:              fixBundleCached,
 		flags:            SetupOnly,
 	},
+	{
+		configKeySuffix:  "check-ram",
+		checkDescription: "Checking minimum RAM requirements",
+		check: func() error {
+			return validation.ValidateEnoughMemory(constants.DefaultMemory)
+		},
+		fixDescription: fmt.Sprintf("crc requires at least %s to run", units.HumanSize(float64(constants.DefaultMemory*1024*1024))),
+		flags:          NoFix,
+	},
 }
 
 func checkBundleCached() error {
diff --git a/pkg/crc/preflight/preflight_checks_linux.go b/pkg/crc/preflight/preflight_checks_linux.go
index a62d7d593..bd85d0bac 100644
--- a/pkg/crc/preflight/preflight_checks_linux.go
+++ b/pkg/crc/preflight/preflight_checks_linux.go
@@ -277,7 +277,7 @@ func checkLibvirtCrcNetworkAvailable() error {
 	return checkLibvirtCrcNetworkDefinition()
 }
 
-func getLibvirtNetworkXml() (string, error) {
+func getLibvirtNetworkXML() (string, error) {
 	config := libvirt.NetworkConfig{
 		NetworkName: libvirt.DefaultNetwork,
 		MAC:         libvirt.MACAddress,
@@ -299,9 +299,9 @@ func getLibvirtNetworkXml() (string, error) {
 func fixLibvirtCrcNetworkAvailable() error {
 	logging.Debug("Creating libvirt 'crc' network")
 
-	netXMLDef, err := getLibvirtNetworkXml()
+	netXMLDef, err := getLibvirtNetworkXML()
 	if err != nil {
-		logging.Debugf("getLibvirtNetworkXml() failed: %v", err)
+		logging.Debugf("getLibvirtNetworkXML() failed: %v", err)
 		return fmt.Errorf("Failed to read libvirt 'crc' network definition")
 	}
 
@@ -398,7 +398,7 @@ func checkLibvirtCrcNetworkDefinition() error {
 	}
 	stdOut = trimSpacesFromXML(stdOut)
 
-	netXMLDef, err := getLibvirtNetworkXml()
+	netXMLDef, err := getLibvirtNetworkXML()
 	if err != nil {
 		return fmt.Errorf("Failed to generate 'crc' network XML from template: %s", err)
 	}
diff --git a/pkg/crc/preflight/preflight_checks_nonwin.go b/pkg/crc/preflight/preflight_checks_nonwin.go
index 670e5c9e3..d5f51dbb9 100644
--- a/pkg/crc/preflight/preflight_checks_nonwin.go
+++ b/pkg/crc/preflight/preflight_checks_nonwin.go
@@ -11,7 +11,7 @@ import (
 	crcos "github.com/code-ready/crc/pkg/os"
 )
 
-var nonWinPreflightChecks = [...]PreflightCheck{
+var nonWinPreflightChecks = [...]Check{
 	{
 		configKeySuffix:  "check-root-user",
 		checkDescription: "Checking if running as non-root",
diff --git a/pkg/crc/preflight/preflight_checks_windows.go b/pkg/crc/preflight/preflight_checks_windows.go
index 79d5a757c..49a37545c 100644
--- a/pkg/crc/preflight/preflight_checks_windows.go
+++ b/pkg/crc/preflight/preflight_checks_windows.go
@@ -17,26 +17,26 @@ import (
 
 const (
 	// Fall Creators update comes with the "Default Switch"
-	minimumWindowsReleaseId = 1709
+	minimumWindowsReleaseID = 1709
 )
 
 func checkVersionOfWindowsUpdate() error {
-	windowsReleaseId := `(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId`
+	windowsReleaseID := `(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId`
 
-	stdOut, _, err := powershell.Execute(windowsReleaseId)
+	stdOut, _, err := powershell.Execute(windowsReleaseID)
 	if err != nil {
 		logging.Debug(err.Error())
 		return fmt.Errorf("Failed to get Windows release id")
 	}
-	yourWindowsReleaseId, err := strconv.Atoi(strings.TrimSpace(stdOut))
+	yourWindowsReleaseID, err := strconv.Atoi(strings.TrimSpace(stdOut))
 
 	if err != nil {
 		logging.Debug(err.Error())
 		return fmt.Errorf("Failed to parse Windows release id: %s", stdOut)
 	}
 
-	if yourWindowsReleaseId < minimumWindowsReleaseId {
-		return fmt.Errorf("Please update Windows. Currently %d is the minimum release needed to run. You are running %d", minimumWindowsReleaseId, yourWindowsReleaseId)
+	if yourWindowsReleaseID < minimumWindowsReleaseID {
+		return fmt.Errorf("Please update Windows. Currently %d is the minimum release needed to run. You are running %d", minimumWindowsReleaseID, yourWindowsReleaseID)
 	}
 	return nil
 }
@@ -168,12 +168,12 @@ func checkIfRunningAsNormalUser() error {
 	return fmt.Errorf("crc should be ran as a normal user")
 }
 
-func removeDnsServerAddress() error {
-	resetDnsCommand := `Set-DnsClientServerAddress -InterfaceAlias ("vEthernet (crc)") -ResetServerAddresses`
+func removeDNSServerAddress() error {
+	resetDNSCommand := `Set-DnsClientServerAddress -InterfaceAlias ("vEthernet (crc)") -ResetServerAddresses`
 	if exist, defaultSwitch := winnet.GetDefaultSwitchName(); exist {
-		resetDnsCommand = fmt.Sprintf(`Set-DnsClientServerAddress -InterfaceAlias ("vEthernet (%s)","vEthernet (crc)") -ResetServerAddresses`, defaultSwitch)
+		resetDNSCommand = fmt.Sprintf(`Set-DnsClientServerAddress -InterfaceAlias ("vEthernet (%s)","vEthernet (crc)") -ResetServerAddresses`, defaultSwitch)
 	}
-	if _, _, err := powershell.ExecuteAsAdmin("Remove dns entry for default switch", resetDnsCommand); err != nil {
+	if _, _, err := powershell.ExecuteAsAdmin("Remove dns entry for default switch", resetDNSCommand); err != nil {
 		return err
 	}
 	return nil
diff --git a/pkg/crc/preflight/preflight_darwin.go b/pkg/crc/preflight/preflight_darwin.go
index fb2704171..43e612c50 100644
--- a/pkg/crc/preflight/preflight_darwin.go
+++ b/pkg/crc/preflight/preflight_darwin.go
@@ -5,7 +5,7 @@ import (
 )
 
 // SetupHost performs the prerequisite checks and setups the host to run the cluster
-var hyperkitPreflightChecks = [...]PreflightCheck{
+var hyperkitPreflightChecks = [...]Check{
 	{
 		configKeySuffix:  "check-hyperkit-installed",
 		checkDescription: "Checking if HyperKit is installed",
@@ -22,7 +22,7 @@ var hyperkitPreflightChecks = [...]PreflightCheck{
 	},
 }
 
-var dnsPreflightChecks = [...]PreflightCheck{
+var dnsPreflightChecks = [...]Check{
 	{
 		configKeySuffix:  "check-hosts-file-permissions",
 		checkDescription: fmt.Sprintf("Checking file permissions for %s", hostsFile),
@@ -41,7 +41,7 @@ var dnsPreflightChecks = [...]PreflightCheck{
 	},
 }
 
-var traySetupChecks = [...]PreflightCheck{
+var traySetupChecks = [...]Check{
 	{
 		checkDescription: "Checking if tray binary is installed",
 		check:            checkTrayBinaryPresent,
@@ -94,8 +94,8 @@ var traySetupChecks = [...]PreflightCheck{
 	},
 }
 
-func getPreflightChecks() []PreflightCheck {
-	checks := []PreflightCheck{}
+func getPreflightChecks() []Check {
+	checks := []Check{}
 
 	checks = append(checks, genericPreflightChecks[:]...)
 	checks = append(checks, nonWinPreflightChecks[:]...)
diff --git a/pkg/crc/preflight/preflight_linux.go b/pkg/crc/preflight/preflight_linux.go
index 15f8befb2..68519c825 100644
--- a/pkg/crc/preflight/preflight_linux.go
+++ b/pkg/crc/preflight/preflight_linux.go
@@ -1,6 +1,6 @@
 package preflight
 
-var libvirtPreflightChecks = [...]PreflightCheck{
+var libvirtPreflightChecks = [...]Check{
 	{
 		configKeySuffix:  "check-virt-enabled",
 		checkDescription: "Checking if Virtualization is enabled",
@@ -112,8 +112,8 @@ var libvirtPreflightChecks = [...]PreflightCheck{
 	},
 }
 
-func getPreflightChecks() []PreflightCheck {
-	checks := []PreflightCheck{}
+func getPreflightChecks() []Check {
+	checks := []Check{}
 	checks = append(checks, genericPreflightChecks[:]...)
 	checks = append(checks, nonWinPreflightChecks[:]...)
 	checks = append(checks, libvirtPreflightChecks[:]...)
diff --git a/pkg/crc/preflight/preflight_windows.go b/pkg/crc/preflight/preflight_windows.go
index 99a4f6a2c..ddc4fe9ce 100644
--- a/pkg/crc/preflight/preflight_windows.go
+++ b/pkg/crc/preflight/preflight_windows.go
@@ -1,6 +1,6 @@
 package preflight
 
-var hypervPreflightChecks = [...]PreflightCheck{
+var hypervPreflightChecks = [...]Check{
 	{
 		configKeySuffix:  "check-administrator-user",
 		checkDescription: "Checking if running as normal user",
@@ -45,7 +45,7 @@ var hypervPreflightChecks = [...]PreflightCheck{
 	},
 	{
 		cleanupDescription: "Removing dns server from interface",
-		cleanup:            removeDnsServerAddress,
+		cleanup:            removeDNSServerAddress,
 		flags:              CleanUpOnly,
 	},
 	{
@@ -55,7 +55,7 @@ var hypervPreflightChecks = [...]PreflightCheck{
 	},
 }
 
-var traySetupChecks = [...]PreflightCheck{
+var traySetupChecks = [...]Check{
 	{
 		checkDescription:   "Checking if user is allowed to log on as a service",
 		check:              checkUserHasServiceLogonEnabled,
@@ -115,8 +115,8 @@ var traySetupChecks = [...]PreflightCheck{
 	},
 }
 
-func getPreflightChecks() []PreflightCheck {
-	checks := []PreflightCheck{}
+func getPreflightChecks() []Check {
+	checks := []Check{}
 	checks = append(checks, genericPreflightChecks[:]...)
 	checks = append(checks, hypervPreflightChecks[:]...)
 
diff --git a/pkg/crc/services/dns/dns_darwin.go b/pkg/crc/services/dns/dns_darwin.go
index c1a74f5bc..3d566815c 100644
--- a/pkg/crc/services/dns/dns_darwin.go
+++ b/pkg/crc/services/dns/dns_darwin.go
@@ -140,5 +140,5 @@ func waitForNetwork() error {
 			}
 		}
 	}
-	return fmt.Errorf("Host is not connected to internet.")
+	return fmt.Errorf("Host is not connected to internet")
 }
diff --git a/pkg/crc/services/dns/dns_windows.go b/pkg/crc/services/dns/dns_windows.go
index 672ad124a..57c569de1 100644
--- a/pkg/crc/services/dns/dns_windows.go
+++ b/pkg/crc/services/dns/dns_windows.go
@@ -59,7 +59,7 @@ func setInterfaceNameserverValue(iface string, address string) {
 	args := fmt.Sprintf(`interface ip set dns "%s" static %s primary`, iface, address)
 
 	// ignore the error as this is useless (prefer not to use nolint here)
-	_ = win32.ShellExecuteAsAdmin(fmt.Sprintf("add dns server address to interface %s", iface), win32.HWND_DESKTOP, exe, args, "", 0)
+	_ = win32.ShellExecuteAsAdmin(fmt.Sprintf("add dns server address to interface %s", iface), win32.HwndDesktop, exe, args, "", 0)
 }
 
 func parseLines(input string) []string {
diff --git a/pkg/crc/services/dns/template.go b/pkg/crc/services/dns/template.go
index b36edfd1e..6009277c5 100644
--- a/pkg/crc/services/dns/template.go
+++ b/pkg/crc/services/dns/template.go
@@ -47,7 +47,7 @@ func createDnsmasqDNSConfig(serviceConfig services.ServicePostStartConfig) error
 		InternalIP:  serviceConfig.BundleMetadata.Nodes[0].InternalIP,
 	}
 
-	dnsConfig, err := createDnsConfigFile(dnsmasqConfFileValues, dnsmasqConfTemplate)
+	dnsConfig, err := createDNSConfigFile(dnsmasqConfFileValues, dnsmasqConfTemplate)
 	if err != nil {
 		return err
 	}
@@ -55,7 +55,7 @@ func createDnsmasqDNSConfig(serviceConfig services.ServicePostStartConfig) error
 	return serviceConfig.SSHRunner.CopyData([]byte(dnsConfig), "/var/srv/dnsmasq.conf")
 }
 
-func createDnsConfigFile(values dnsmasqConfFileValues, tmpl string) (string, error) {
+func createDNSConfigFile(values dnsmasqConfFileValues, tmpl string) (string, error) {
 	var dnsConfigFile bytes.Buffer
 
 	t, err := template.New("dnsConfigFile").Parse(tmpl)
diff --git a/pkg/crc/services/services.go b/pkg/crc/services/services.go
index 24e5f0c6b..36cbf0781 100644
--- a/pkg/crc/services/services.go
+++ b/pkg/crc/services/services.go
@@ -18,7 +18,7 @@ type ServicePreStartResult struct {
 
 type ServicePostStartConfig struct {
 	Name           string
-	SSHRunner      *ssh.SSHRunner
+	SSHRunner      *ssh.Runner
 	DriverName     string
 	BundleMetadata bundle.CrcBundleInfo
 	IP             string
diff --git a/pkg/crc/ssh/ssh.go b/pkg/crc/ssh/ssh.go
index 8edd267ad..61c21a22d 100644
--- a/pkg/crc/ssh/ssh.go
+++ b/pkg/crc/ssh/ssh.go
@@ -10,25 +10,25 @@ import (
 	"github.com/code-ready/machine/libmachine/drivers"
 )
 
-type SSHRunner struct {
+type Runner struct {
 	driver        drivers.Driver
 	privateSSHKey string
 }
 
-func CreateRunner(driver drivers.Driver) *SSHRunner {
+func CreateRunner(driver drivers.Driver) *Runner {
 	return CreateRunnerWithPrivateKey(driver, constants.GetPrivateKeyPath())
 }
 
-func CreateRunnerWithPrivateKey(driver drivers.Driver, privateKey string) *SSHRunner {
-	return &SSHRunner{driver: driver, privateSSHKey: privateKey}
+func CreateRunnerWithPrivateKey(driver drivers.Driver, privateKey string) *Runner {
+	return &Runner{driver: driver, privateSSHKey: privateKey}
 }
 
 // Create a host using the driver's config
-func (runner *SSHRunner) Run(command string) (string, error) {
+func (runner *Runner) Run(command string) (string, error) {
 	return runner.runSSHCommandFromDriver(command, false)
 }
 
-func (runner *SSHRunner) SetTextContentAsRoot(destFilename string, content string, mode os.FileMode) error {
+func (runner *Runner) SetTextContentAsRoot(destFilename string, content string, mode os.FileMode) error {
 	logging.Debugf("Creating %s with permissions 0%o in the CRC VM", destFilename, mode)
 	command := fmt.Sprintf("sudo install -m 0%o /dev/null %s && cat <<EOF | sudo tee %s\n%s\nEOF", mode, destFilename, destFilename, content)
 	_, err := runner.RunPrivate(command)
@@ -36,15 +36,15 @@ func (runner *SSHRunner) SetTextContentAsRoot(destFilename string, content strin
 	return err
 }
 
-func (runner *SSHRunner) RunPrivate(command string) (string, error) {
+func (runner *Runner) RunPrivate(command string) (string, error) {
 	return runner.runSSHCommandFromDriver(command, true)
 }
 
-func (runner *SSHRunner) SetPrivateKeyPath(path string) {
+func (runner *Runner) SetPrivateKeyPath(path string) {
 	runner.privateSSHKey = path
 }
 
-func (runner *SSHRunner) CopyData(data []byte, destFilename string) error {
+func (runner *Runner) CopyData(data []byte, destFilename string) error {
 	base64Data := base64.StdEncoding.EncodeToString(data)
 	command := fmt.Sprintf("echo %s | base64 --decode | sudo tee %s > /dev/null", base64Data, destFilename)
 	_, err := runner.Run(command)
@@ -52,7 +52,7 @@ func (runner *SSHRunner) CopyData(data []byte, destFilename string) error {
 	return err
 }
 
-func (runner *SSHRunner) runSSHCommandFromDriver(command string, runPrivate bool) (string, error) {
+func (runner *Runner) runSSHCommandFromDriver(command string, runPrivate bool) (string, error) {
 	client, err := drivers.GetSSHClientFromDriver(runner.driver, runner.privateSSHKey)
 	if err != nil {
 		return "", err
diff --git a/pkg/crc/systemd/instance.go b/pkg/crc/systemd/instance.go
index 62227f86e..9d7e81111 100644
--- a/pkg/crc/systemd/instance.go
+++ b/pkg/crc/systemd/instance.go
@@ -8,11 +8,11 @@ import (
 )
 
 type InstanceSystemdCommander struct {
-	sshRunner *ssh.SSHRunner
+	sshRunner *ssh.Runner
 }
 
 // NewVmSystemdCommander creates a new instance of a VmSystemdCommander
-func NewInstanceSystemdCommander(sshRunner *ssh.SSHRunner) *InstanceSystemdCommander {
+func NewInstanceSystemdCommander(sshRunner *ssh.Runner) *InstanceSystemdCommander {
 	return &InstanceSystemdCommander{
 		sshRunner: sshRunner,
 	}
@@ -84,10 +84,5 @@ func (c InstanceSystemdCommander) IsActive(name string) (bool, error) {
 
 func (c InstanceSystemdCommander) service(name string, action actions.Action) (string, error) {
 	command := fmt.Sprintf("sudo systemctl -f %s %s", action.String(), name)
-
-	if out, err := c.sshRunner.Run(command); err != nil {
-		return out, err
-	} else {
-		return out, nil
-	}
+	return c.sshRunner.Run(command)
 }
diff --git a/pkg/crc/systemd/systemd.go b/pkg/crc/systemd/systemd.go
index 705579d2d..b4733c3d9 100644
--- a/pkg/crc/systemd/systemd.go
+++ b/pkg/crc/systemd/systemd.go
@@ -4,7 +4,7 @@ import (
 	"github.com/code-ready/crc/pkg/crc/systemd/states"
 )
 
-type SystemdCommander interface {
+type Commander interface {
 	Start(name string) (bool, error)
 	Stop(name string) (bool, error)
 	Reload(name string) (bool, error)
diff --git a/pkg/crc/validation/validation.go b/pkg/crc/validation/validation.go
index 2345d9735..436e8676c 100644
--- a/pkg/crc/validation/validation.go
+++ b/pkg/crc/validation/validation.go
@@ -10,7 +10,10 @@ import (
 
 	"github.com/code-ready/crc/pkg/crc/constants"
 	"github.com/code-ready/crc/pkg/crc/errors"
+	"github.com/code-ready/crc/pkg/crc/logging"
 	"github.com/code-ready/crc/pkg/crc/version"
+	"github.com/docker/go-units"
+	"github.com/pbnjay/memory"
 )
 
 // ValidateCPUs checks if provided cpus count is valid
@@ -26,6 +29,19 @@ func ValidateMemory(value int) error {
 	if value < constants.DefaultMemory {
 		return errors.Newf("requires memory in MiB >= %d", constants.DefaultMemory)
 	}
+	return ValidateEnoughMemory(value)
+}
+
+// ValidateEnoughMemory checks if enough memory is installed on the host
+func ValidateEnoughMemory(value int) error {
+	totalMemory := memory.TotalMemory()
+	logging.Debugf("Total memory of system is %d bytes", totalMemory)
+	valueBytes := value * 1024 * 1024
+	if totalMemory < uint64(valueBytes) {
+		return fmt.Errorf("only %s of memory found (%s required)",
+			units.HumanSize(float64(totalMemory)),
+			units.HumanSize(float64(valueBytes)))
+	}
 	return nil
 }
 
@@ -34,9 +50,8 @@ func ValidateBundle(bundle string) error {
 	if err := ValidatePath(bundle); err != nil {
 		if constants.BundleEmbedded() {
 			return errors.Newf("Run 'crc setup' to unpack the bundle to disk")
-		} else {
-			return errors.Newf("Please provide the path to a valid bundle using the -b option")
 		}
+		return errors.Newf("Please provide the path to a valid bundle using the -b option")
 	}
 	// Check if the version of the bundle provided by user is same as what is released with crc.
 	releaseBundleVersion := version.GetBundleVersion()
@@ -47,8 +62,8 @@ func ValidateBundle(bundle string) error {
 	return nil
 }
 
-// ValidateIpAddress checks if provided IP is valid
-func ValidateIpAddress(ipAddress string) error {
+// ValidateIPAddress checks if provided IP is valid
+func ValidateIPAddress(ipAddress string) error {
 	ip := net.ParseIP(ipAddress).To4()
 	if ip == nil {
 		return errors.Newf("'%s' is not a valid IPv4 address", ipAddress)
diff --git a/pkg/os/shell/shell.go b/pkg/os/shell/shell.go
index 62ba8bcab..fef075978 100644
--- a/pkg/os/shell/shell.go
+++ b/pkg/os/shell/shell.go
@@ -8,7 +8,7 @@ import (
 	"github.com/code-ready/machine/libmachine/shell"
 )
 
-type ShellConfig struct {
+type Config struct {
 	Prefix     string
 	Delimiter  string
 	Suffix     string
diff --git a/pkg/os/util.go b/pkg/os/util.go
index 38fbfebeb..640ab4d7d 100644
--- a/pkg/os/util.go
+++ b/pkg/os/util.go
@@ -86,14 +86,14 @@ func CopyFileContents(src string, dst string, permission os.FileMode) error {
 	return nil
 }
 
-func WriteFileIfContentChanged(path string, new_content []byte, perm os.FileMode) (bool, error) {
-	old_content, err := ioutil.ReadFile(filepath.Clean(path))
-	if (err == nil) && (bytes.Equal(old_content, new_content)) {
+func WriteFileIfContentChanged(path string, newContent []byte, perm os.FileMode) (bool, error) {
+	oldContent, err := ioutil.ReadFile(filepath.Clean(path))
+	if (err == nil) && (bytes.Equal(oldContent, newContent)) {
 		return false, nil
 	}
 	/* Intentionally ignore errors, just try to write the file if we can't read it */
 
-	err = ioutil.WriteFile(path, new_content, perm)
+	err = ioutil.WriteFile(path, newContent, perm)
 	if err != nil {
 		return false, err
 	}
diff --git a/pkg/os/windows/network/vswitch_windows.go b/pkg/os/windows/network/vswitch_windows.go
index 0c014cd49..f8f57f45a 100644
--- a/pkg/os/windows/network/vswitch_windows.go
+++ b/pkg/os/windows/network/vswitch_windows.go
@@ -7,7 +7,7 @@ import (
 	"github.com/code-ready/crc/pkg/os/windows/powershell"
 )
 
-const hypervDefaultVirtualSwitchId = "c08cb7b8-9b3c-408e-8e30-5e16a3aeb444"
+const hypervDefaultVirtualSwitchID = "c08cb7b8-9b3c-408e-8e30-5e16a3aeb444"
 
 func SelectSwitchByNameOrDefault(name string) (bool, string) {
 	// if named exists
@@ -35,7 +35,7 @@ func ExistsSwitchByName(name string) bool {
 }
 
 func GetDefaultSwitchName() (bool, string) {
-	getDefaultSwitchNameCmd := fmt.Sprintf("[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-VMSwitch -Id %s | ForEach-Object { $_.Name }", hypervDefaultVirtualSwitchId)
+	getDefaultSwitchNameCmd := fmt.Sprintf("[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-VMSwitch -Id %s | ForEach-Object { $_.Name }", hypervDefaultVirtualSwitchID)
 	stdOut, stdErr, _ := powershell.Execute(getDefaultSwitchNameCmd)
 
 	// If stdErr contains the command then execution failed
diff --git a/pkg/os/windows/secpol/secpol_windows.go b/pkg/os/windows/secpol/secpol_windows.go
index 177e266c5..2a24039c2 100644
--- a/pkg/os/windows/secpol/secpol_windows.go
+++ b/pkg/os/windows/secpol/secpol_windows.go
@@ -64,7 +64,7 @@ func hasLogonUserRight(username string) bool {
 	for _, sid := range getUsersWithLogonUserRights() {
 		/* seservicelogonright could either contain the username or the SID
 		 * the SID has a * at the beginning which needs to be removed to match with user's sid
-		 * if its a username it doesn't have the '*' in the begining
+		 * if its a username it doesn't have the '*' in the beginning
 		 */
 		userSid, err := getSidOfCurrentUser()
 		if err != nil || sid == "" {
diff --git a/pkg/os/windows/win32/shell32_windows.go b/pkg/os/windows/win32/shell32_windows.go
index 81967a59b..6c805843a 100644
--- a/pkg/os/windows/win32/shell32_windows.go
+++ b/pkg/os/windows/win32/shell32_windows.go
@@ -8,7 +8,7 @@ import (
 )
 
 const (
-	HWND_DESKTOP = windows.Handle(0)
+	HwndDesktop = windows.Handle(0)
 )
 
 // Uses "runas" as verb to execute as Elevated privileges
diff --git a/vendor/github.com/pbnjay/memory/LICENSE b/vendor/github.com/pbnjay/memory/LICENSE
new file mode 100644
index 000000000..63ca4a6d2
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2017, Jeremy Jay
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/pbnjay/memory/README.md b/vendor/github.com/pbnjay/memory/README.md
new file mode 100644
index 000000000..07534906b
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/README.md
@@ -0,0 +1,40 @@
+# memory
+
+Package `memory` provides a single method reporting total physical system memory
+accessible to the kernel. It does not account for memory used by other processes.
+
+This package has no external dependency beside the standard library.
+
+Documentation:
+[![GoDoc](https://godoc.org/github.com/pbnjay/memory?status.svg)](https://godoc.org/github.com/pbnjay/memory)
+
+This is useful for dynamic code to minimize thrashing and other contention, similar to the stdlib `runtime.NumCPU`
+See some history of the proposal at https://github.com/golang/go/issues/21816
+
+
+## Example
+
+```go
+fmt.Printf("Total system memory: %d\n", memory.TotalMemory())
+```
+
+
+## Testing
+
+Tested/working on:
+ - macOS 10.12.6 (16G29)
+ - Windows 10 1511 (10586.1045)
+ - Linux RHEL (3.10.0-327.3.1.el7.x86_64)
+ - Raspberry Pi 3 (ARMv8) on Raspbian, ODROID-C1+ (ARMv7) on Ubuntu, C.H.I.P
+   (ARMv7).
+
+Tested on virtual machines:
+ - Windows 7 SP1 386
+ - Debian stretch 386
+ - NetBSD 7.1 amd64 + 386
+ - OpenBSD 6.1 amd64 + 386
+ - FreeBSD 11.1 amd64 + 386
+ - DragonFly BSD 4.8.1 amd64
+
+If you have access to untested systems (notably arm) please
+test and file bugs if necessary.
diff --git a/vendor/github.com/pbnjay/memory/doc.go b/vendor/github.com/pbnjay/memory/doc.go
new file mode 100644
index 000000000..f1944bf8f
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/doc.go
@@ -0,0 +1,14 @@
+// Package memory provides a single method reporting total system memory
+// accessible to the kernel.
+package memory
+
+// TotalMemory returns the total accessible system memory in bytes.
+//
+// The total accessible memory is installed physical memory size minus reserved
+// areas for the kernel and hardware, if such reservations are reported by
+// the operating system.
+//
+// If accessible memory size could not be determined, then 0 is returned.
+func TotalMemory() uint64 {
+	return sysTotalMemory()
+}
diff --git a/vendor/github.com/pbnjay/memory/memory_bsd.go b/vendor/github.com/pbnjay/memory/memory_bsd.go
new file mode 100644
index 000000000..22eb93bd0
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/memory_bsd.go
@@ -0,0 +1,11 @@
+// +build freebsd openbsd dragonfly netbsd
+
+package memory
+
+func sysTotalMemory() uint64 {
+	s, err := sysctlUint64("hw.physmem")
+	if err != nil {
+		return 0
+	}
+	return s
+}
diff --git a/vendor/github.com/pbnjay/memory/memory_darwin.go b/vendor/github.com/pbnjay/memory/memory_darwin.go
new file mode 100644
index 000000000..55096952f
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/memory_darwin.go
@@ -0,0 +1,11 @@
+// +build darwin
+
+package memory
+
+func sysTotalMemory() uint64 {
+	s, err := sysctlUint64("hw.memsize")
+	if err != nil {
+		return 0
+	}
+	return s
+}
diff --git a/vendor/github.com/pbnjay/memory/memory_linux.go b/vendor/github.com/pbnjay/memory/memory_linux.go
new file mode 100644
index 000000000..bcc6017a9
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/memory_linux.go
@@ -0,0 +1,17 @@
+// +build linux
+
+package memory
+
+import "syscall"
+
+func sysTotalMemory() uint64 {
+	in := &syscall.Sysinfo_t{}
+	err := syscall.Sysinfo(in)
+	if err != nil {
+		return 0
+	}
+	// If this is a 32-bit system, then these fields are
+	// uint32 instead of uint64.
+	// So we always convert to uint64 to match signature.
+	return uint64(in.Totalram) * uint64(in.Unit)
+}
diff --git a/vendor/github.com/pbnjay/memory/memory_windows.go b/vendor/github.com/pbnjay/memory/memory_windows.go
new file mode 100644
index 000000000..6d77edbb4
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/memory_windows.go
@@ -0,0 +1,38 @@
+// +build windows
+
+package memory
+
+import (
+	"syscall"
+	"unsafe"
+)
+
+// omitting a few fields for brevity...
+// https://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx
+type memStatusEx struct {
+	dwLength     uint32
+	dwMemoryLoad uint32
+	ullTotalPhys uint64
+	unused       [6]uint64
+}
+
+func sysTotalMemory() uint64 {
+	kernel32, err := syscall.LoadDLL("kernel32.dll")
+	if err != nil {
+		return 0
+	}
+	// GetPhysicallyInstalledSystemMemory is simpler, but broken on
+	// older versions of windows (and uses this under the hood anyway).
+	globalMemoryStatusEx, err := kernel32.FindProc("GlobalMemoryStatusEx")
+	if err != nil {
+		return 0
+	}
+	msx := &memStatusEx{
+		dwLength: 64,
+	}
+	r, _, _ := globalMemoryStatusEx.Call(uintptr(unsafe.Pointer(msx)))
+	if r == 0 {
+		return 0
+	}
+	return msx.ullTotalPhys
+}
diff --git a/vendor/github.com/pbnjay/memory/memsysctl.go b/vendor/github.com/pbnjay/memory/memsysctl.go
new file mode 100644
index 000000000..438d9eff8
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/memsysctl.go
@@ -0,0 +1,21 @@
+// +build darwin freebsd openbsd dragonfly netbsd
+
+package memory
+
+import (
+	"syscall"
+	"unsafe"
+)
+
+func sysctlUint64(name string) (uint64, error) {
+	s, err := syscall.Sysctl(name)
+	if err != nil {
+		return 0, err
+	}
+	// hack because the string conversion above drops a \0
+	b := []byte(s)
+	if len(b) < 8 {
+		b = append(b, 0)
+	}
+	return *(*uint64)(unsafe.Pointer(&b[0])), nil
+}
diff --git a/vendor/github.com/pbnjay/memory/stub.go b/vendor/github.com/pbnjay/memory/stub.go
new file mode 100644
index 000000000..790dca642
--- /dev/null
+++ b/vendor/github.com/pbnjay/memory/stub.go
@@ -0,0 +1,7 @@
+// +build !linux,!darwin,!windows,!freebsd,!dragonfly,!netbsd,!openbsd
+
+package memory
+
+func sysTotalMemory() uint64 {
+	return 0
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 98474c775..9ab80b658 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -82,6 +82,8 @@ github.com/mattn/go-runewidth
 github.com/mgutz/ansi
 # github.com/mitchellh/mapstructure v1.1.2
 github.com/mitchellh/mapstructure
+# github.com/pbnjay/memory v0.0.0-20190104145345-974d429e7ae4
+github.com/pbnjay/memory
 # github.com/pborman/uuid v1.2.0
 github.com/pborman/uuid
 # github.com/pelletier/go-toml v1.2.0


Test patch:
diff --git a/pkg/crc/api/api_test.go b/pkg/crc/api/api_test.go
index 2329a1929..a42b7d341 100644
--- a/pkg/crc/api/api_test.go
+++ b/pkg/crc/api/api_test.go
@@ -24,7 +24,7 @@ func TestApi(t *testing.T) {
 	require.NoError(t, err)
 	defer listener.Close()
 
-	api, err := createApiServerWithListener(listener)
+	api, err := createAPIServerWithListener(listener)
 	require.NoError(t, err)
 	go api.Serve()
 
diff --git a/pkg/crc/cluster/clusteroperator_test.go b/pkg/crc/cluster/clusteroperator_test.go
index 9f959021e..d43be2d78 100644
--- a/pkg/crc/cluster/clusteroperator_test.go
+++ b/pkg/crc/cluster/clusteroperator_test.go
@@ -12,10 +12,10 @@ import (
 )
 
 var (
-	available = &ClusterStatus{
+	available = &Status{
 		Available: true,
 	}
-	progressing = &ClusterStatus{
+	progressing = &Status{
 		Available:   true,
 		Progressing: true,
 	}
@@ -52,8 +52,8 @@ func TestGetClusterOperatorStatusNotFound(t *testing.T) {
 	assert.EqualError(t, err, "no cluster operator found")
 }
 
-func ocConfig(s string) oc.OcConfig {
-	return oc.OcConfig{
+func ocConfig(s string) oc.Config {
+	return oc.Config{
 		Runner: &mockRunner{file: filepath.Join("testdata", s)},
 	}
 }
diff --git a/pkg/crc/oc/oc_linux_test.go b/pkg/crc/oc/oc_linux_test.go
index 8d233a0ef..3b37610a0 100644
--- a/pkg/crc/oc/oc_linux_test.go
+++ b/pkg/crc/oc/oc_linux_test.go
@@ -7,8 +7,8 @@ import (
 )
 
 func TestRunCommand(t *testing.T) {
-	ocConfig := OcConfig{
-		Runner: OcLocalRunner{
+	ocConfig := Config{
+		Runner: LocalRunner{
 			OcBinaryPath:   "/bin/echo",
 			KubeconfigPath: "kubeconfig-file",
 		},
@@ -21,7 +21,7 @@ func TestRunCommand(t *testing.T) {
 }
 
 func TestEnvRunner(t *testing.T) {
-	runner := OcEnvRunner{
+	runner := EnvRunner{
 		OcBinaryPath:  "printenv",
 		KubeconfigEnv: "some-env",
 	}
@@ -31,8 +31,8 @@ func TestEnvRunner(t *testing.T) {
 }
 
 func TestRunCommandWithoutContextAndCluster(t *testing.T) {
-	ocConfig := OcConfig{
-		Runner: OcLocalRunner{
+	ocConfig := Config{
+		Runner: LocalRunner{
 			OcBinaryPath:   "/bin/echo",
 			KubeconfigPath: "kubeconfig-file",
 		},