github.com/google/go-github/v69@v69.2.0/github/enterprise_manage_ghes_test.go (about)

     1  // Copyright 2025 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  	"net/http"
    12  	"testing"
    13  
    14  	"github.com/google/go-cmp/cmp"
    15  )
    16  
    17  func TestEnterpriseService_CheckSystemRequirements(t *testing.T) {
    18  	t.Parallel()
    19  	client, mux, _ := setup(t)
    20  
    21  	mux.HandleFunc("/manage/v1/checks/system-requirements", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "GET")
    23  		fmt.Fprint(w, `{
    24  			"status": "OK",
    25  			"nodes": [{
    26  				"hostname": "primary",
    27  				"status": "OK",
    28  				"roles_status": [{
    29  					"status": "OK",
    30  					"role": "ConsulServer"
    31  					}
    32  				]}
    33  			]}`)
    34  	})
    35  
    36  	ctx := context.Background()
    37  	systemRequirements, _, err := client.Enterprise.CheckSystemRequirements(ctx)
    38  	if err != nil {
    39  		t.Errorf("Enterprise.CheckSystemRequirements returned error: %v", err)
    40  	}
    41  
    42  	want := &SystemRequirements{
    43  		Status: Ptr("OK"),
    44  		Nodes: []*SystemRequirementsNode{{
    45  			Hostname: Ptr("primary"),
    46  			Status:   Ptr("OK"),
    47  			RolesStatus: []*SystemRequirementsNodeRoleStatus{{
    48  				Status: Ptr("OK"),
    49  				Role:   Ptr("ConsulServer"),
    50  			}},
    51  		}},
    52  	}
    53  	if !cmp.Equal(systemRequirements, want) {
    54  		t.Errorf("Enterprise.CheckSystemRequirements returned %+v, want %+v", systemRequirements, want)
    55  	}
    56  
    57  	const methodName = "CheckSystemRequirements"
    58  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    59  		got, resp, err := client.Enterprise.CheckSystemRequirements(ctx)
    60  		if got != nil {
    61  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    62  		}
    63  		return resp, err
    64  	})
    65  }
    66  
    67  func TestEnterpriseService_ClusterStatus(t *testing.T) {
    68  	t.Parallel()
    69  	client, mux, _ := setup(t)
    70  
    71  	mux.HandleFunc("/manage/v1/cluster/status", func(w http.ResponseWriter, r *http.Request) {
    72  		testMethod(t, r, "GET")
    73  		fmt.Fprint(w, `{
    74      		"status": "OK",
    75     			"nodes": [{
    76              	"hostname": "primary",
    77              	"status": "OK",
    78              	"services": []
    79          	}]
    80  		}`)
    81  	})
    82  
    83  	ctx := context.Background()
    84  	clusterStatus, _, err := client.Enterprise.ClusterStatus(ctx)
    85  	if err != nil {
    86  		t.Errorf("Enterprise.ClusterStatus returned error: %v", err)
    87  	}
    88  
    89  	want := &ClusterStatus{
    90  		Status: Ptr("OK"),
    91  		Nodes: []*ClusterStatusNode{{
    92  			Hostname: Ptr("primary"),
    93  			Status:   Ptr("OK"),
    94  			Services: []*ClusterStatusNodeServiceItem{},
    95  		}},
    96  	}
    97  	if !cmp.Equal(clusterStatus, want) {
    98  		t.Errorf("Enterprise.ClusterStatus returned %+v, want %+v", clusterStatus, want)
    99  	}
   100  
   101  	const methodName = "ClusterStatus"
   102  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   103  		got, resp, err := client.Enterprise.ClusterStatus(ctx)
   104  		if got != nil {
   105  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   106  		}
   107  		return resp, err
   108  	})
   109  }
   110  
   111  func TestEnterpriseService_ReplicationStatus(t *testing.T) {
   112  	t.Parallel()
   113  	client, mux, _ := setup(t)
   114  
   115  	mux.HandleFunc("/manage/v1/replication/status", func(w http.ResponseWriter, r *http.Request) {
   116  		testMethod(t, r, "GET")
   117  		testFormValues(t, r, values{
   118  			"uuid":          "1234-1234",
   119  			"cluster_roles": "primary",
   120  		})
   121  		fmt.Fprint(w, `{
   122      		"status": "OK",
   123     			"nodes": [{
   124              	"hostname": "primary",
   125              	"status": "OK",
   126              	"services": []
   127          	}]
   128  		}`)
   129  	})
   130  
   131  	opt := &NodeQueryOptions{
   132  		UUID: Ptr("1234-1234"), ClusterRoles: Ptr("primary"),
   133  	}
   134  	ctx := context.Background()
   135  	replicationStatus, _, err := client.Enterprise.ReplicationStatus(ctx, opt)
   136  	if err != nil {
   137  		t.Errorf("Enterprise.ReplicationStatus returned error: %v", err)
   138  	}
   139  
   140  	want := &ClusterStatus{
   141  		Status: Ptr("OK"),
   142  		Nodes: []*ClusterStatusNode{{
   143  			Hostname: Ptr("primary"),
   144  			Status:   Ptr("OK"),
   145  			Services: []*ClusterStatusNodeServiceItem{},
   146  		}},
   147  	}
   148  	if !cmp.Equal(replicationStatus, want) {
   149  		t.Errorf("Enterprise.ReplicationStatus returned %+v, want %+v", replicationStatus, want)
   150  	}
   151  
   152  	const methodName = "ReplicationStatus"
   153  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   154  		got, resp, err := client.Enterprise.ReplicationStatus(ctx, opt)
   155  		if got != nil {
   156  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   157  		}
   158  		return resp, err
   159  	})
   160  }
   161  
   162  func TestEnterpriseService_Versions(t *testing.T) {
   163  	t.Parallel()
   164  	client, mux, _ := setup(t)
   165  
   166  	mux.HandleFunc("/manage/v1/version", func(w http.ResponseWriter, r *http.Request) {
   167  		testMethod(t, r, "GET")
   168  		testFormValues(t, r, values{
   169  			"uuid":          "1234-1234",
   170  			"cluster_roles": "primary",
   171  		})
   172  		fmt.Fprint(w, `[{
   173      		"hostname": "primary",
   174     			"version": {
   175              	"version": "3.9.0",
   176              	"platform": "azure",
   177              	"build_id": "fc542058b5",
   178  				"build_date": "2023-05-02"
   179          	}
   180  		}]`)
   181  	})
   182  
   183  	opt := &NodeQueryOptions{
   184  		UUID: Ptr("1234-1234"), ClusterRoles: Ptr("primary"),
   185  	}
   186  	ctx := context.Background()
   187  	releaseVersions, _, err := client.Enterprise.GetNodeReleaseVersions(ctx, opt)
   188  	if err != nil {
   189  		t.Errorf("Enterprise.GetNodeReleaseVersions returned error: %v", err)
   190  	}
   191  
   192  	want := []*NodeReleaseVersion{{
   193  		Hostname: Ptr("primary"),
   194  		Version: &ReleaseVersion{
   195  			Version:   Ptr("3.9.0"),
   196  			Platform:  Ptr("azure"),
   197  			BuildID:   Ptr("fc542058b5"),
   198  			BuildDate: Ptr("2023-05-02"),
   199  		},
   200  	}}
   201  	if !cmp.Equal(releaseVersions, want) {
   202  		t.Errorf("Enterprise.GetNodeReleaseVersions returned %+v, want %+v", releaseVersions, want)
   203  	}
   204  
   205  	const methodName = "GetNodeReleaseVersions"
   206  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   207  		got, resp, err := client.Enterprise.GetNodeReleaseVersions(ctx, opt)
   208  		if got != nil {
   209  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   210  		}
   211  		return resp, err
   212  	})
   213  }