github.com/rkt/rkt@v1.30.1-0.20200224141603-171c416fac02/tests/rkt_dns_test.go (about) 1 // Copyright 2016 The rkt Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package main 16 17 import ( 18 "crypto/sha1" 19 "fmt" 20 "io/ioutil" 21 "os" 22 "testing" 23 "time" 24 25 "github.com/rkt/rkt/tests/testutils" 26 ) 27 28 // TestDNS is checking how rkt fills /etc/resolv.conf 29 func TestDNSParam(t *testing.T) { 30 imageFile := patchTestACI("rkt-inspect-exit.aci", "--exec=/inspect --print-msg=Hello --read-file") 31 defer os.Remove(imageFile) 32 ctx := testutils.NewRktRunCtx() 33 defer ctx.Cleanup() 34 35 for i, tt := range []struct { 36 paramDNS string 37 expectedLine string 38 expectedError bool 39 }{ 40 { 41 paramDNS: "", 42 expectedLine: "Cannot read file", 43 expectedError: TestedFlavor.ExitStatusPreserved, 44 }, 45 { 46 paramDNS: "--dns=8.8.4.4", 47 expectedLine: "nameserver 8.8.4.4", 48 expectedError: false, 49 }, 50 { 51 paramDNS: "--dns=8.8.8.8 --dns=8.8.4.4", 52 expectedLine: "nameserver 8.8.8.8", 53 expectedError: false, 54 }, 55 { 56 paramDNS: "--dns=8.8.8.8 --dns=8.8.4.4 --dns-search=search.com --dns-opt=debug", 57 expectedLine: "nameserver 8.8.4.4", 58 expectedError: false, 59 }, 60 { 61 paramDNS: "--dns-search=foo.com --dns-search=bar.com", 62 expectedLine: "search foo.com bar.com", 63 expectedError: false, 64 }, 65 { 66 paramDNS: "--dns-opt=debug --dns-opt=use-vc --dns-opt=rotate", 67 expectedLine: "options debug use-vc rotate", 68 expectedError: false, 69 }, 70 { 71 paramDNS: "--dns-opt=debug --dns-opt=use-vc --dns-opt=rotate --dns-domain=example.net", 72 expectedLine: "domain example.net", 73 expectedError: false, 74 }, 75 } { 76 77 rktCmd := fmt.Sprintf(`%s --insecure-options=image run --set-env=FILE=/etc/resolv.conf %s %s`, 78 ctx.Cmd(), tt.paramDNS, imageFile) 79 _ = i 80 // t.Logf("%d: %s\n", i, rktCmd) 81 runRktAndCheckOutput(t, rktCmd, tt.expectedLine, tt.expectedError) 82 } 83 } 84 85 // TestHostDNS checks that --dns=host reflects the host's /etc/resolv.conf 86 func TestDNSHost(t *testing.T) { 87 dat, err := ioutil.ReadFile("/etc/resolv.conf") 88 if err != nil { 89 t.Fatal("Could not read host's resolv.conf", err) 90 } 91 92 sum := fmt.Sprintf("%x", sha1.Sum(dat)) 93 t.Log("Expecting sum", sum) 94 95 ctx := testutils.NewRktRunCtx() 96 defer ctx.Cleanup() 97 98 appCmd := "--exec=/inspect -- --hash-file" 99 rktCmd := fmt.Sprintf("%s --insecure-options=image run --dns=host --set-env=FILE=/etc/resolv.conf %s %s", 100 ctx.Cmd(), getInspectImagePath(), appCmd) 101 102 child := spawnOrFail(t, rktCmd) 103 ctx.RegisterChild(child) 104 defer waitOrFail(t, child, 0) 105 106 expectedRegex := `sha1sum: ([0-9a-f]+)` 107 result, out, err := expectRegexTimeoutWithOutput(child, expectedRegex, 30*time.Second) 108 if err != nil { 109 t.Fatalf("Error: %v\nOutput: %v", err, out) 110 } 111 112 if result[1] != sum { 113 t.Fatalf("container's /etc/host has sha1sum %s expected %s", result[1], sum) 114 } 115 }