github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/generic/http/client/integrationtest/main_test.go (about) 1 package integrationtest 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "os/exec" 8 "sync" 9 "testing" 10 "time" 11 12 _ "github.com/lib/pq" 13 "github.com/ory/dockertest" 14 "github.com/redis/go-redis/v9" 15 16 "github.com/angryronald/go-kit/test/docker/mockserver" 17 redisInDocker "github.com/angryronald/go-kit/test/docker/redis" 18 ) 19 20 var redisClient *redis.Client 21 var poolResourceMap map[*dockertest.Pool]*dockertest.Resource 22 var lock sync.Mutex 23 var port int 24 25 func init() { 26 poolResourceMap = map[*dockertest.Pool]*dockertest.Resource{} 27 } 28 29 func preseed() { 30 cmd := exec.Command("curl", "-X", "PUT", 31 "-H", "Content-Type: application/json", 32 "-d", `{ 33 "httpRequest": { 34 "method": "GET", 35 "path": "/api/resource", 36 "queryStringParameters": { 37 "param1": ["value1"] 38 }, 39 "headers": { 40 "authorization": ["bearer token"], 41 "content-type": "application/json" 42 } 43 }, 44 "httpResponse": { 45 "statusCode": 200, 46 "body": "{\"message\": \"Mocked response\"}", 47 "delay": { 48 "timeUnit": "MILLISECONDS", 49 "value": 500 50 } 51 } 52 }`, 53 fmt.Sprintf("http://localhost:%d/mockserver/expectation", port), 54 ) 55 56 // Capture and print the command's output 57 output, err := cmd.CombinedOutput() 58 if err != nil { 59 fmt.Println("Error preseed mockserver endpoint (GET):", err) 60 os.Exit(1) 61 } 62 63 fmt.Println("Command Output (GET):", string(output)) 64 65 cmd = exec.Command("curl", "-X", "PUT", 66 "-H", "Content-Type: application/json", 67 "-d", `{ 68 "httpRequest": { 69 "method": "POST", 70 "path": "/api/resource", 71 "body": { 72 "type": "STRING", 73 "value": "{\"username\":\"test\",\"password\":\"password\"}" 74 }, 75 "headers": { 76 "authorization": ["bearer token"], 77 "content-type": "application/json" 78 } 79 }, 80 "httpResponse": { 81 "statusCode": 200, 82 "body": "{\"message\": \"Mocked response with request body\"}", 83 "delay": { 84 "timeUnit": "MILLISECONDS", 85 "value": 500 86 } 87 } 88 }`, 89 fmt.Sprintf("http://localhost:%d/mockserver/expectation", port), 90 ) 91 92 // Capture and print the command's output 93 output, err = cmd.CombinedOutput() 94 if err != nil { 95 fmt.Println("Error preseed mockserver endpoint (POST):", err) 96 os.Exit(1) 97 } 98 99 fmt.Println("Command Output (POST):", string(output)) 100 } 101 102 // Using docker command 103 func TestMain(m *testing.M) { 104 // var err error 105 106 port = mockserver.StartMockServer() 107 108 time.Sleep(10 * time.Second) 109 110 preseed() 111 112 pool, err := dockertest.NewPool("") 113 if err != nil { 114 log.Fatalf("Could not connect to Docker: %s\n", err) 115 } 116 117 redisClientTemp, redisResource := redisInDocker.GenerateInstance(pool) 118 if redisClientTemp != nil { 119 redisClient = redisClientTemp 120 fmt.Printf("Success generate redis instance\n") 121 } 122 123 code := m.Run() // execute all the tests 124 125 // Delete the Docker container 126 for pool, instance := range poolResourceMap { 127 if err := pool.Purge(instance); err != nil { 128 log.Fatalf("Could not purge postgres resource: %s\n", err) 129 } 130 } 131 132 // Delete the Docker container 133 if err := pool.Purge(redisResource); err != nil { 134 log.Fatalf("Could not purge redis resource: %s\n", err) 135 } 136 137 defer os.Exit(code) 138 defer mockserver.StopMockServer() 139 }