Skip to content

Commit 84ae77b

Browse files
committed
Fix TestPostData
1 parent d6851ae commit 84ae77b

File tree

1 file changed

+70
-76
lines changed

1 file changed

+70
-76
lines changed

internal/agent/ondemand/ondemand_test.go

Lines changed: 70 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,25 @@ package ondemand
22

33
import (
44
"fmt"
5+
"io"
6+
"net/http"
7+
"net/http/httptest"
58
"os"
9+
"sync"
610
"testing"
711
"time"
812
"yc-agent/internal/capture"
913
"yc-agent/internal/capture/executils"
1014

1115
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/require"
1217
)
1318

1419
const (
1520
api = "tier1app@12312-12233-1442134-112"
1621
host = "https://test.gceasy.io"
1722
)
1823

19-
func init() {
20-
// err := os.Chdir("testdata")
21-
// if err != nil {
22-
// panic(err)
23-
// }
24-
}
25-
2624
func TestFindGCLog(t *testing.T) {
2725
// Skip: Test requires Java environment with compiled MyClass.java to run background Java processes.
2826
// This is an integration test that verifies GC log detection from running Java processes.
@@ -90,82 +88,78 @@ func TestFindGCLog(t *testing.T) {
9088
}
9189

9290
func TestPostData(t *testing.T) {
93-
// Skip: Test makes external HTTP calls to test.gceasy.io which is flaky in CI.
94-
// This is an integration test that should be run manually or in a dedicated integration test suite.
95-
t.Skip("Skipping: test makes external HTTP calls to test.gceasy.io")
91+
// Track received requests for assertions
92+
var mu sync.Mutex
93+
receivedRequests := make(map[string]struct {
94+
method string
95+
bodySize int
96+
})
9697

98+
// Create mock HTTP server
99+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
100+
// Read body to get size
101+
body, _ := io.ReadAll(r.Body)
102+
defer r.Body.Close()
103+
104+
// Extract dt parameter
105+
dt := r.URL.Query().Get("dt")
106+
107+
mu.Lock()
108+
receivedRequests[dt] = struct {
109+
method string
110+
bodySize int
111+
}{
112+
method: r.Method,
113+
bodySize: len(body),
114+
}
115+
mu.Unlock()
116+
117+
w.WriteHeader(http.StatusOK)
118+
w.Write([]byte("success"))
119+
}))
120+
defer server.Close()
121+
122+
// Build endpoint using mock server URL
97123
timestamp := time.Now().Format("2006-01-02T15-04-05")
98124
parameters := fmt.Sprintf("de=%s&ts=%s", capture.GetOutboundIP().String(), timestamp)
99-
endpoint := fmt.Sprintf("%s/ycrash-receiver?apiKey=%s&%s", host, api, parameters)
125+
endpoint := fmt.Sprintf("%s/ycrash-receiver?apiKey=%s&%s", server.URL, api, parameters)
126+
127+
// Test data files - path relative to ondemand package
128+
testFiles := []struct {
129+
path string
130+
dtType string
131+
}{
132+
{"../testdata/top.out", "top"},
133+
{"../testdata/disk.out", "df"},
134+
{"../testdata/netstat.out", "ns"},
135+
{"../testdata/ps.out", "ps"},
136+
{"../testdata/vmstat.out", "vmstat"},
137+
{"../testdata/gc.log", "gc"},
138+
{"../testdata/threaddump.out", "td"},
139+
}
100140

101-
t.Run("requestFin", func(t *testing.T) {
102-
finEp := fmt.Sprintf("%s/yc-fin?apiKey=%s&%s", host, api, parameters)
103-
RequestFin(finEp)
104-
})
141+
for _, tf := range testFiles {
142+
t.Run(tf.dtType, func(t *testing.T) {
143+
file, err := os.Open(tf.path)
144+
require.NoError(t, err, "Failed to open test file: %s", tf.path)
145+
defer file.Close()
105146

106-
vmstat, err := os.Open("testdata/vmstat.out")
107-
if err != nil {
108-
return
109-
}
110-
defer vmstat.Close()
111-
ps, err := os.Open("testdata/ps.out")
112-
if err != nil {
113-
t.Fatal(err)
114-
}
115-
defer ps.Close()
116-
top, err := os.Open("testdata/top.out")
117-
if err != nil {
118-
t.Fatal(err)
119-
}
120-
defer top.Close()
121-
df, err := os.Open("testdata/disk.out")
122-
if err != nil {
123-
t.Fatal(err)
124-
}
125-
defer df.Close()
126-
netstat, err := os.Open("testdata/netstat.out")
127-
if err != nil {
128-
t.Fatal(err)
147+
msg, ok := capture.PostData(endpoint, tf.dtType, file)
148+
assert.True(t, ok, "PostData failed for %s: %s", tf.dtType, msg)
149+
})
129150
}
130-
defer netstat.Close()
131-
gc, err := os.Open("testdata/gc.log")
132-
if err != nil {
133-
t.Fatal(err)
134-
}
135-
defer gc.Close()
136-
td, err := os.Open("testdata/threaddump.out")
137-
if err != nil {
138-
t.Fatal(err)
139-
}
140-
defer td.Close()
141151

142-
msg, ok := capture.PostData(endpoint, "top", top)
143-
if !ok {
144-
t.Fatal("post data failed", msg)
145-
}
146-
msg, ok = capture.PostData(endpoint, "df", df)
147-
if !ok {
148-
t.Fatal("post data failed", msg)
149-
}
150-
msg, ok = capture.PostData(endpoint, "ns", netstat)
151-
if !ok {
152-
t.Fatal("post data failed", msg)
153-
}
154-
msg, ok = capture.PostData(endpoint, "ps", ps)
155-
if !ok {
156-
t.Fatal("post data failed", msg)
157-
}
158-
msg, ok = capture.PostData(endpoint, "vmstat", vmstat)
159-
if !ok {
160-
t.Fatal("post data failed", msg)
161-
}
162-
msg, ok = capture.PostData(endpoint, "gc", gc)
163-
if !ok {
164-
t.Fatal("post data failed", msg)
165-
}
166-
msg, ok = capture.PostData(endpoint, "td", td)
167-
if !ok {
168-
t.Fatal("post data failed", msg)
152+
// Verify all requests were received correctly
153+
mu.Lock()
154+
defer mu.Unlock()
155+
156+
for _, tf := range testFiles {
157+
req, exists := receivedRequests[tf.dtType]
158+
assert.True(t, exists, "Request for dt=%s was not received", tf.dtType)
159+
if exists {
160+
assert.Equal(t, "POST", req.method, "Expected POST method for dt=%s", tf.dtType)
161+
assert.Greater(t, req.bodySize, 0, "Expected non-empty body for dt=%s", tf.dtType)
162+
}
169163
}
170164
}
171165

0 commit comments

Comments
 (0)