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 }