@@ -2,13 +2,10 @@ package scanner_test
22
33import (
44 "context"
5- "encoding/base64"
6- "encoding/json"
7- "strings"
8-
95 "github.com/golang/mock/gomock"
106 . "github.com/onsi/ginkgo"
117 . "github.com/onsi/gomega"
8+ "os"
129
1310 batchv1 "k8s.io/api/batch/v1"
1411 corev1 "k8s.io/api/core/v1"
@@ -31,6 +28,34 @@ const (
3128 resourceName = "inline-scan-1e668f7cc4c27e915cfed9793808357e"
3229)
3330
31+ type envItem struct {
32+ value string
33+ defined bool
34+ }
35+
36+ func saveEnv (keys []string ) map [string ]envItem {
37+ envItems := make (map [string ]envItem )
38+ for _ , key := range keys {
39+ value , defined := os .LookupEnv (key )
40+ envItems [key ] = envItem {
41+ value : value ,
42+ defined : defined ,
43+ }
44+ }
45+
46+ return envItems
47+ }
48+
49+ func restoreEnv (savedItems map [string ]envItem ) {
50+ for key , item := range savedItems {
51+ if item .defined {
52+ os .Setenv (key , item .value )
53+ } else {
54+ os .Unsetenv (key )
55+ }
56+ }
57+ }
58+
3459var _ = Describe ("InlineAdapter" , func () {
3560 var (
3661 controller * gomock.Controller
@@ -43,7 +68,7 @@ var _ = Describe("InlineAdapter", func() {
4368 controller = gomock .NewController (GinkgoT ())
4469 client = mocks .NewMockClient (controller )
4570 k8sClient = fake .NewSimpleClientset ()
46- inlineAdapter = scanner .NewInlineAdapter (client , k8sClient , secureURL , namespace , secret )
71+ inlineAdapter = scanner .NewInlineAdapter (client , k8sClient , secureURL , namespace , secret , true )
4772 })
4873
4974 AfterEach (func () {
@@ -65,6 +90,40 @@ var _ = Describe("InlineAdapter", func() {
6590 Expect (result ).To (Equal (job ()))
6691 })
6792
93+ It ("proxy env vars are included in the Job environment" , func () {
94+
95+ savedEnv := saveEnv ([]string {"http_proxy" , "https_proxy" , "HTTPS_PROXY" , "no_proxy" , "NO_PROXY" })
96+
97+ os .Setenv ("http_proxy" , "http_proxy-value" )
98+ os .Setenv ("https_proxy" , "https_proxy-value" )
99+ os .Setenv ("HTTPS_PROXY" , "HTTPS_PROXY-value" )
100+ os .Setenv ("no_proxy" , "no_proxy-value" )
101+ os .Setenv ("NO_PROXY" , "NO_PROXY-value" )
102+
103+ inlineAdapter .Scan (scanRequest ())
104+
105+ restoreEnv (savedEnv )
106+
107+ result , _ := k8sClient .BatchV1 ().Jobs (namespace ).Get (context .Background (), resourceName , metav1.GetOptions {})
108+
109+ Expect (result .Spec .Template .Spec .Containers [0 ].Env ).To (ContainElement (corev1.EnvVar {Name : "http_proxy" , Value : "http_proxy-value" }))
110+ Expect (result .Spec .Template .Spec .Containers [0 ].Env ).To (ContainElement (corev1.EnvVar {Name : "https_proxy" , Value : "https_proxy-value" }))
111+ Expect (result .Spec .Template .Spec .Containers [0 ].Env ).To (ContainElement (corev1.EnvVar {Name : "HTTPS_PROXY" , Value : "HTTPS_PROXY-value" }))
112+ Expect (result .Spec .Template .Spec .Containers [0 ].Env ).To (ContainElement (corev1.EnvVar {Name : "no_proxy" , Value : "no_proxy-value" }))
113+ Expect (result .Spec .Template .Spec .Containers [0 ].Env ).To (ContainElement (corev1.EnvVar {Name : "NO_PROXY" , Value : "NO_PROXY-value" }))
114+ })
115+
116+ It ("adds --sysdig-skip-tls in insecure" , func () {
117+
118+ inlineAdapter = scanner .NewInlineAdapter (client , k8sClient , secureURL , namespace , secret , false )
119+
120+ inlineAdapter .Scan (scanRequest ())
121+
122+ result , _ := k8sClient .BatchV1 ().Jobs (namespace ).Get (context .Background (), resourceName , metav1.GetOptions {})
123+
124+ Expect (result .Spec .Template .Spec .Containers [0 ].Args ).To (ContainElement (ContainSubstring ("--sysdig-skip-tls" )))
125+ })
126+
68127 Context ("when a job already exists" , func () {
69128 It ("returns the scanID for checking if scan has finished" , func () {
70129 k8sClient .BatchV1 ().Jobs (namespace ).Create (context .Background (), activeJob (), metav1.CreateOptions {})
@@ -121,19 +180,6 @@ var _ = Describe("InlineAdapter", func() {
121180 })
122181})
123182
124- func getUserAndPasswordFromSecret (k8sClient kubernetes.Interface , namespace string , name string ) (string , string ) {
125- secret , _ := k8sClient .CoreV1 ().Secrets (namespace ).Get (context .Background (), name , metav1.GetOptions {})
126-
127- var parsed map [string ]interface {}
128- json .Unmarshal (secret .Data ["config.json" ], & parsed )
129-
130- encodedCredentials := parsed ["auths" ].(map [string ]interface {})["harbor.sysdig-demo.zone" ].(map [string ]interface {})["auth" ].(string )
131- basicAuthCredentials , _ := base64 .StdEncoding .DecodeString (encodedCredentials )
132- credentials := strings .Split (string (basicAuthCredentials ), ":" )
133-
134- return credentials [0 ], credentials [1 ]
135- }
136-
137183func job () * batchv1.Job {
138184 jobTTL := int32 (86400 )
139185 return & batchv1.Job {
@@ -149,15 +195,15 @@ func job() *batchv1.Job {
149195 Containers : []corev1.Container {
150196 {
151197 Name : "scanner" ,
152- Image : "sysdiglabs /sysdig-inline-scan:harbor-1.0 " ,
198+ Image : "quay.io /sysdig/secure -inline-scan:2 " ,
153199 Command : []string {"/bin/sh" },
154200 Args : []string {
155201 "-c" ,
156- "/sysdig-inline-scan.sh -s https://secure.sysdig.com -k '$(SYSDIG_SECURE_API_TOKEN)' -d an image digest -P -n -u robot$9f6711d1-834d-11ea-867f-76103d08dca8:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAwMDk5OTksImlhdCI6MTU4NzQxNzk5OSwiaXNzIjoiaGFyYm9yLXRva2VuLWRlZmF1bHRJc3N1ZXIiLCJpZCI6OSwicGlkIjoyLCJhY2Nlc3MiOlt7IlJlc291cmNlIjoiL3Byb2plY3QvMi9yZXBvc2l0b3J5IiwiQWN0aW9uIjoic2Nhbm5lci1wdWxsIiwiRWZmZWN0IjoiIn1dfQ.A3_aTzvxqSTvl26pQKa97ay15zRPC9K55NE0WbEyOsY3m0KFz-HuSDatncWLSYvOlcGVdysKlF3JXYWIjQ7tEI4V76WA9UMoi-fr9vEEdWLF5C1uWZJOz_S72sQ3G1BzsLp3HyWe9ZN5EBK9mhXzYNv2rONYrr0UJeBmNnMf2mU3sH71OO_G6JvRl5fwFSLSYx8nQs82PhfVhx50wRuWl_zyeCCDy_ytLzjRBvZwKuI9iVIxgM1pRfKG15NWMHfl0lcYnjm7f1_WFGKtVddkLOTICK0_FPtef1L8A16ozo_2NA32WD9PstdcTuD37XbZ6AFXUAZFoZLfCEW97mtIZBY2uYMwDQtc6Nme4o3Ya-MnBEIAs9Vi9d5a4pkf7Two-xjI-9ESgVz79YqL-_OnecQPNJ9yAFtJuxQ7StfsCIZx84hh5VdcZmW9jlezRHh4hTAjsNmrOBFTAjPyaXk98Se3Fj0Ev3bChod63og4frE7_fE7HnoBKVPHRAdBhJ2yrAiPymfij_kD4ke1Vb0AxmGGOwRP2K3TZNqEdKcq89lU6lHYV2UfrWchuF3u4ieNEC1BGu1_m_c55f0YZH1FAq6evCyA0JnFuXzO4cCxC7WHzXXRGSC9Lm3LF7cbaZAgFj5d34gbgUQmJst8nPlpW-KtwRL-pHC6mipunCBv9bU harbor.sysdig-demo.zone/sysdig/agent:9.7.0 || true" ,
202+ "/sysdig-inline-scan.sh --sysdig-url https://secure.sysdig.com -d an image digest --registry-skip-tls --registry-auth-basic 'robot$9f6711d1-834d-11ea-867f-76103d08dca8:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAwMDk5OTksImlhdCI6MTU4NzQxNzk5OSwiaXNzIjoiaGFyYm9yLXRva2VuLWRlZmF1bHRJc3N1ZXIiLCJpZCI6OSwicGlkIjoyLCJhY2Nlc3MiOlt7IlJlc291cmNlIjoiL3Byb2plY3QvMi9yZXBvc2l0b3J5IiwiQWN0aW9uIjoic2Nhbm5lci1wdWxsIiwiRWZmZWN0IjoiIn1dfQ.A3_aTzvxqSTvl26pQKa97ay15zRPC9K55NE0WbEyOsY3m0KFz-HuSDatncWLSYvOlcGVdysKlF3JXYWIjQ7tEI4V76WA9UMoi-fr9vEEdWLF5C1uWZJOz_S72sQ3G1BzsLp3HyWe9ZN5EBK9mhXzYNv2rONYrr0UJeBmNnMf2mU3sH71OO_G6JvRl5fwFSLSYx8nQs82PhfVhx50wRuWl_zyeCCDy_ytLzjRBvZwKuI9iVIxgM1pRfKG15NWMHfl0lcYnjm7f1_WFGKtVddkLOTICK0_FPtef1L8A16ozo_2NA32WD9PstdcTuD37XbZ6AFXUAZFoZLfCEW97mtIZBY2uYMwDQtc6Nme4o3Ya-MnBEIAs9Vi9d5a4pkf7Two-xjI-9ESgVz79YqL-_OnecQPNJ9yAFtJuxQ7StfsCIZx84hh5VdcZmW9jlezRHh4hTAjsNmrOBFTAjPyaXk98Se3Fj0Ev3bChod63og4frE7_fE7HnoBKVPHRAdBhJ2yrAiPymfij_kD4ke1Vb0AxmGGOwRP2K3TZNqEdKcq89lU6lHYV2UfrWchuF3u4ieNEC1BGu1_m_c55f0YZH1FAq6evCyA0JnFuXzO4cCxC7WHzXXRGSC9Lm3LF7cbaZAgFj5d34gbgUQmJst8nPlpW-KtwRL-pHC6mipunCBv9bU' harbor.sysdig-demo.zone/sysdig/agent:9.7.0 || true" ,
157203 },
158204 Env : []corev1.EnvVar {
159205 {
160- Name : "SYSDIG_SECURE_API_TOKEN " ,
206+ Name : "SYSDIG_API_TOKEN " ,
161207 ValueFrom : & corev1.EnvVarSource {
162208 SecretKeyRef : & corev1.SecretKeySelector {
163209 LocalObjectReference : corev1.LocalObjectReference {
0 commit comments