go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/processes/flag_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package processes
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestParseFlags(t *testing.T) {
    14  	cmd := "etcd --advertise-client-urls=https://192.168.99.101:2379 --cert-file=/var/lib/minikube/certs/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/minikube/etcd --initial-advertise-peer-urls=https://192.168.99.101:2380 --initial-cluster=m01=https://192.168.99.101:2380 --key-file=/var/lib/minikube/certs/etcd/server.key --listen-client-urls=https://127.0.0.1:2379,https://192.168.99.101:2379 --listen-metrics-urls=http://127.0.0.1:2381 --listen-peer-urls=https://192.168.99.101:2380 --name=m01 --peer-cert-file=/var/lib/minikube/certs/etcd/peer.crt --peer-client-cert-auth=true --peer-key-file=/var/lib/minikube/certs/etcd/peer.key --peer-trusted-ca-file=/var/lib/minikube/certs/etcd/ca.crt --snapshot-count=10000 --trusted-ca-file=/var/lib/minikube/certs/etcd/ca.crt"
    15  
    16  	fs := FlagSet{}
    17  	err := fs.ParseCommand(cmd)
    18  	require.NoError(t, err)
    19  	assert.Equal(t, map[string]string{
    20  		"advertise-client-urls":       "https://192.168.99.101:2379",
    21  		"cert-file":                   "/var/lib/minikube/certs/etcd/server.crt",
    22  		"client-cert-auth":            "true",
    23  		"data-dir":                    "/var/lib/minikube/etcd",
    24  		"initial-advertise-peer-urls": "https://192.168.99.101:2380",
    25  		"initial-cluster":             "m01=https://192.168.99.101:2380",
    26  		"key-file":                    "/var/lib/minikube/certs/etcd/server.key",
    27  		"listen-client-urls":          "https://127.0.0.1:2379,https://192.168.99.101:2379",
    28  		"listen-metrics-urls":         "http://127.0.0.1:2381",
    29  		"listen-peer-urls":            "https://192.168.99.101:2380",
    30  		"name":                        "m01", "peer-cert-file": "/var/lib/minikube/certs/etcd/peer.crt",
    31  		"peer-client-cert-auth": "true",
    32  		"peer-key-file":         "/var/lib/minikube/certs/etcd/peer.key",
    33  		"peer-trusted-ca-file":  "/var/lib/minikube/certs/etcd/ca.crt",
    34  		"snapshot-count":        "10000",
    35  		"trusted-ca-file":       "/var/lib/minikube/certs/etcd/ca.crt",
    36  	}, fs.actual)
    37  }
    38  
    39  func TestParseShorthand(t *testing.T) {
    40  	cmd := "go run apps/mondoo/mondoo.go shell -t ssh://docker@1.1.1.1 -i ~/.minikube/machines/minikube/id_rsa"
    41  	fs := FlagSet{}
    42  	err := fs.ParseCommand(cmd)
    43  	require.NoError(t, err)
    44  	assert.Equal(t, map[string]string{
    45  		"run":                   "",
    46  		"apps/mondoo/mondoo.go": "",
    47  		"shell":                 "",
    48  		"t":                     "ssh://docker@1.1.1.1",
    49  		"i":                     "~/.minikube/machines/minikube/id_rsa",
    50  	}, fs.actual)
    51  }
    52  
    53  type testSet struct {
    54  	cmd   string
    55  	flags map[string]string
    56  }
    57  
    58  func TestFlagParser(t *testing.T) {
    59  	tests := []testSet{
    60  		{
    61  			cmd: "/usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=minikube",
    62  			flags: map[string]string{
    63  				"config":            "/var/lib/kube-proxy/config.conf",
    64  				"hostname-override": "minikube",
    65  			},
    66  		},
    67  		{
    68  			cmd: "/usr/bin/containerd-shim-runc-v2 -namespace moby -id 233b77262f559db23e3f663c21174dc346aaa025f39ef9643ba068fee0b87912 -address /var/run/docker/containerd/containerd.sock",
    69  			flags: map[string]string{
    70  				"namespace": "moby",
    71  				"id":        "233b77262f559db23e3f663c21174dc346aaa025f39ef9643ba068fee0b87912",
    72  				"address":   "/var/run/docker/containerd/containerd.sock",
    73  			},
    74  		},
    75  		{
    76  			cmd: "kube-apiserver --advertise-address=192.168.99.103 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/var/lib/minikube/certs/ca.crt --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --enable-bootstrap-token-auth=true --etcd-cafile=/var/lib/minikube/certs/etcd/ca.crt --etcd-certfile=/var/lib/minikube/certs/apiserver-etcd-client.crt --etcd-keyfile=/var/lib/minikube/certs/apiserver-etcd-client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-client-certificate=/var/lib/minikube/certs/apiserver-kubelet-client.crt --kubelet-client-key=/var/lib/minikube/certs/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/var/lib/minikube/certs/front-proxy-client.crt --proxy-client-key-file=/var/lib/minikube/certs/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/var/lib/minikube/certs/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=8443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/minikube/certs/sa.pub --service-account-signing-key-file=/var/lib/minikube/certs/sa.key --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/var/lib/minikube/certs/apiserver.crt --tls-private-key-file=/var/lib/minikube/certs/apiserver.key",
    77  			flags: map[string]string{
    78  				"advertise-address":                  "192.168.99.103",
    79  				"allow-privileged":                   "true",
    80  				"authorization-mode":                 "Node,RBAC",
    81  				"client-ca-file":                     "/var/lib/minikube/certs/ca.crt",
    82  				"enable-admission-plugins":           "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
    83  				"enable-bootstrap-token-auth":        "true",
    84  				"etcd-cafile":                        "/var/lib/minikube/certs/etcd/ca.crt",
    85  				"etcd-certfile":                      "/var/lib/minikube/certs/apiserver-etcd-client.crt",
    86  				"etcd-keyfile":                       "/var/lib/minikube/certs/apiserver-etcd-client.key",
    87  				"etcd-servers":                       "https://127.0.0.1:2379",
    88  				"insecure-port":                      "0",
    89  				"kubelet-client-certificate":         "/var/lib/minikube/certs/apiserver-kubelet-client.crt",
    90  				"kubelet-client-key":                 "/var/lib/minikube/certs/apiserver-kubelet-client.key",
    91  				"kubelet-preferred-address-types":    "InternalIP,ExternalIP,Hostname",
    92  				"proxy-client-cert-file":             "/var/lib/minikube/certs/front-proxy-client.crt",
    93  				"proxy-client-key-file":              "/var/lib/minikube/certs/front-proxy-client.key",
    94  				"requestheader-allowed-names":        "front-proxy-client",
    95  				"requestheader-client-ca-file":       "/var/lib/minikube/certs/front-proxy-ca.crt",
    96  				"requestheader-extra-headers-prefix": "X-Remote-Extra-",
    97  				"requestheader-group-headers":        "X-Remote-Group",
    98  				"requestheader-username-headers":     "X-Remote-User",
    99  				"secure-port":                        "8443",
   100  				"service-account-issuer":             "https://kubernetes.default.svc.cluster.local",
   101  				"service-account-key-file":           "/var/lib/minikube/certs/sa.pub",
   102  				"service-account-signing-key-file":   "/var/lib/minikube/certs/sa.key",
   103  				"service-cluster-ip-range":           "10.96.0.0/12",
   104  				"tls-cert-file":                      "/var/lib/minikube/certs/apiserver.crt",
   105  				"tls-private-key-file":               "/var/lib/minikube/certs/apiserver.key",
   106  			},
   107  		},
   108  		{
   109  			cmd: "/usr/bin/kubelet --cloud-provider aws --config /etc/kubernetes/kubelet/kubelet-config.json --kubeconfig /var/lib/kubelet/kubeconfig --container-runtime docker --network-plugin cni --node-ip=192.168.32.78 --pod-infra-container-image=1234567.dkr.ecr.us-east-2.amazonaws.com/eks/pause:3.1-eksbuild.1 --v=2 --node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/nodegroup-name=ng-1c08897f,alpha.eksctl.io/cluster-name=cluster1,eks.amazonaws.com/nodegroup-image=ami-0656dd273bd6e9a2f,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=ng-1c08897f,eks.amazonaws.com/sourceLaunchTemplateId=lt-079b3a8f38d6aa1a9 --max-pods=29",
   110  			flags: map[string]string{
   111  				"cloud-provider":            "aws",
   112  				"config":                    "/etc/kubernetes/kubelet/kubelet-config.json",
   113  				"container-runtime":         "docker",
   114  				"kubeconfig":                "/var/lib/kubelet/kubeconfig",
   115  				"max-pods":                  "29",
   116  				"network-plugin":            "cni",
   117  				"node-ip":                   "192.168.32.78",
   118  				"pod-infra-container-image": "1234567.dkr.ecr.us-east-2.amazonaws.com/eks/pause:3.1-eksbuild.1",
   119  				"v":                         "2",
   120  				"node-labels":               "eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/nodegroup-name=ng-1c08897f,alpha.eksctl.io/cluster-name=cluster1,eks.amazonaws.com/nodegroup-image=ami-0656dd273bd6e9a2f,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=ng-1c08897f,eks.amazonaws.com/sourceLaunchTemplateId=lt-079b3a8f38d6aa1a9",
   121  			},
   122  		},
   123  	}
   124  
   125  	for i := range tests {
   126  		test := tests[i]
   127  		fs := FlagSet{}
   128  		err := fs.ParseCommand(test.cmd)
   129  		require.NoError(t, err)
   130  		assert.Equal(t, test.flags, fs.actual, test.cmd)
   131  	}
   132  }