github.com/influxdata/telegraf@v1.30.3/internal/snmp/translator_netsnmp_mocks_generate.go (about) 1 //go:build generate 2 3 package main 4 5 import ( 6 "bufio" 7 "bytes" 8 "fmt" 9 "os" 10 "os/exec" 11 "strings" 12 ) 13 14 // This file is a generator used to generate the mocks for the commands used by the tests. 15 16 // These are the commands to be mocked. 17 var mockedCommands = [][]string{ 18 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.0"}, 19 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.1.1"}, 20 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.1.2"}, 21 {"snmptranslate", "-Td", "-Ob", "-m", "all", "1.0.0.1.1"}, 22 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.0.1.1"}, 23 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.0.1.1.0"}, 24 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.0.1.5"}, 25 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.2.3"}, 26 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".1.0.0.0.1.7"}, 27 {"snmptranslate", "-Td", "-Ob", ".iso.2.3"}, 28 {"snmptranslate", "-Td", "-Ob", "-m", "all", ".999"}, 29 {"snmptranslate", "-Td", "-Ob", "TEST::server"}, 30 {"snmptranslate", "-Td", "-Ob", "TEST::server.0"}, 31 {"snmptranslate", "-Td", "-Ob", "TEST::testTable"}, 32 {"snmptranslate", "-Td", "-Ob", "TEST::connections"}, 33 {"snmptranslate", "-Td", "-Ob", "TEST::latency"}, 34 {"snmptranslate", "-Td", "-Ob", "TEST::description"}, 35 {"snmptranslate", "-Td", "-Ob", "TEST::hostname"}, 36 {"snmptranslate", "-Td", "-Ob", "IF-MIB::ifPhysAddress.1"}, 37 {"snmptranslate", "-Td", "-Ob", "BRIDGE-MIB::dot1dTpFdbAddress.1"}, 38 {"snmptranslate", "-Td", "-Ob", "TCP-MIB::tcpConnectionLocalAddress.1"}, 39 {"snmptranslate", "-Td", "TEST::testTable.1"}, 40 {"snmptable", "-Ch", "-Cl", "-c", "public", "127.0.0.1", "TEST::testTable"}, 41 } 42 43 type mockedCommandResult struct { 44 stdout string 45 stderr string 46 exitError bool 47 } 48 49 func main() { 50 if err := generate(); err != nil { 51 fmt.Fprintf(os.Stderr, "error: %s\n", err) 52 os.Exit(1) 53 } 54 } 55 56 func generate() error { 57 f, err := os.OpenFile("snmp_mocks_test.go", os.O_RDWR, 0644) 58 if err != nil { 59 return err 60 } 61 br := bufio.NewReader(f) 62 var i int64 63 for l, err := br.ReadString('\n'); err == nil; l, err = br.ReadString('\n') { 64 i += int64(len(l)) 65 if l == "// BEGIN GO GENERATE CONTENT\n" { 66 break 67 } 68 } 69 f.Truncate(i) 70 f.Seek(i, 0) 71 72 fmt.Fprintf(f, "var mockedCommandResults = map[string]mockedCommandResult{\n") 73 74 for _, cmd := range mockedCommands { 75 ec := exec.Command(cmd[0], cmd[1:]...) 76 out := bytes.NewBuffer(nil) 77 err := bytes.NewBuffer(nil) 78 ec.Stdout = out 79 ec.Stderr = err 80 ec.Env = []string{ 81 "MIBDIRS=+./testdata", 82 } 83 84 var mcr mockedCommandResult 85 if err := ec.Run(); err != nil { 86 if err, ok := err.(*exec.ExitError); !ok { 87 mcr.exitError = true 88 } else { 89 return fmt.Errorf("executing %v: %s", cmd, err) 90 } 91 } 92 mcr.stdout = string(out.Bytes()) 93 mcr.stderr = string(err.Bytes()) 94 cmd0 := strings.Join(cmd, "\000") 95 mcrv := fmt.Sprintf("%#v", mcr)[5:] // trim `main.` prefix 96 fmt.Fprintf(f, "%#v: %s,\n", cmd0, mcrv) 97 } 98 f.Write([]byte("}\n")) 99 f.Close() 100 101 return exec.Command("gofmt", "-w", "translator_netsnmp_mocks_test.go").Run() 102 }