Atlas › Test

TestPostInfo

Exact test identity: go.temporal.io/server/common/versioninfo/TestPostInfo

Package
go.temporal.io/server/common/versioninfo
Suite / test hierarchy
TestPostInfo
Test
TestPostInfo
Introduced at
caller.go ×17 Frontier kind: Joint frontier
Covered ranges
17
Covered lines
42
Covered files
1

Covered source

Expand a file to inspect source; the > gutter marks covered lines.

go.temporal.io/server/common/versioninfo/caller.go 42 covered LOC · 17 ranges

Open complete file

21 }
22
23 > func (c Caller) Call(r *VersionCheckRequest) (*VersionCheckResponse, error) { caller.go
24 > err := validateRequest(r)
25 > if err != nil {
26 return nil, err
27 }
28 > u := c.getUrl(r) caller.go
29 > tr := &http.Transport{
30 > DisableKeepAlives: true,
31 > MaxIdleConnsPerHost: -1,
32 > }
33 > if c.Scheme == "https" {
34 tr.TLSClientConfig = &tls.Config{}
35 }
36 > client := &http.Client{Transport: tr} caller.go
37 > reqBody, err := json.Marshal(r)
38 > if err != nil {
39 return nil, err
40 }
41 > req, err := http.NewRequest("POST", u.String(), bytes.NewReader(reqBody)) caller.go
42 > if err != nil {
43 return nil, err
44 }
45 > req.Header.Set("Content-Type", "application/json") caller.go
46 > resp, err := client.Do(req)
47 > if err != nil {
48 return nil, err
49 }
50 > if resp.StatusCode != 200 { caller.go
51 return nil, fmt.Errorf("bad response code %v", resp.StatusCode)
52 }
53 > defer resp.Body.Close() caller.go
54 > body, err := io.ReadAll(resp.Body)
55 > if err != nil {
56 return nil, err
57 }
58 > versionCheckResponse := &VersionCheckResponse{} caller.go
59 > if err := json.Unmarshal(body, versionCheckResponse); err != nil {
60 return nil, err
61 }
62 > if err := validateResponse(versionCheckResponse); err != nil { caller.go
63 return nil, err
64 }
65 > return versionCheckResponse, nil caller.go
66 }
67
68 > func validateResponse(r *VersionCheckResponse) error { caller.go
69 > if len(r.Products) == 0 {
70 return errors.New("invalid response: missing product list")
71 }
72 > firstProduct := r.Products[0] caller.go
73 > if firstProduct.Product == "" || firstProduct.Current.Version == "" || firstProduct.Recommended.Version == "" {
74 return errors.New("invalid response: missing product name, current or recommended version")
75 }
76 > return nil caller.go
77 }
78 > func validateRequest(r *VersionCheckRequest) error { caller.go
79 > if r.Product == "" || r.Version == "" || r.ClusterID == "" || r.DB == "" || r.OS == "" || r.Arch == "" || r.Timestamp == 0 {
80 return errors.New("invalid request: missing required fields")
81 }
82 > for _, info := range r.SDKInfo { caller.go
83 > if info.Name == "" || info.Version == "" {
84 return errors.New("invalid request: missing required fields")
85 }
86 }
87 > return nil caller.go
88 }
89
90 > func (c Caller) getUrl(r *VersionCheckRequest) *url.URL { caller.go
91 > var u url.URL
92 > u.Scheme = c.Scheme
93 > u.Host = c.Host
94 > u.Path = "check"
95 > return &u
96 > }