bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/pkg/apiclient/auth_test.go (about)

     1  package apiclient
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  	"net/url"
     7  	"testing"
     8  
     9  	log "github.com/sirupsen/logrus"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestApiAuth(t *testing.T) {
    15  	log.SetLevel(log.TraceLevel)
    16  
    17  	mux, urlx, teardown := setup()
    18  	mux.HandleFunc("/decisions", func(w http.ResponseWriter, r *http.Request) {
    19  		testMethod(t, r, "GET")
    20  		if r.Header.Get("X-Api-Key") == "ixu" {
    21  			assert.Equal(t, r.URL.RawQuery, "ip=1.2.3.4")
    22  			w.WriteHeader(http.StatusOK)
    23  			w.Write([]byte(`null`))
    24  		} else {
    25  			w.WriteHeader(http.StatusForbidden)
    26  			w.Write([]byte(`{"message":"access forbidden"}`))
    27  		}
    28  	})
    29  	log.Printf("URL is %s", urlx)
    30  	apiURL, err := url.Parse(urlx + "/")
    31  	if err != nil {
    32  		log.Fatalf("parsing api url: %s", apiURL)
    33  	}
    34  
    35  	defer teardown()
    36  
    37  	//ok no answer
    38  	auth := &APIKeyTransport{
    39  		APIKey: "ixu",
    40  	}
    41  
    42  	newcli, err := NewDefaultClient(apiURL, "v1", "toto", auth.Client())
    43  	if err != nil {
    44  		log.Fatalf("new api client: %s", err.Error())
    45  	}
    46  
    47  	alert := DecisionsListOpts{IPEquals: new(string)}
    48  	*alert.IPEquals = "1.2.3.4"
    49  	_, resp, err := newcli.Decisions.List(context.Background(), alert)
    50  	require.NoError(t, err)
    51  
    52  	if resp.Response.StatusCode != http.StatusOK {
    53  		t.Errorf("Alerts.List returned status: %d, want %d", resp.Response.StatusCode, http.StatusOK)
    54  	}
    55  
    56  	//ko bad token
    57  	auth = &APIKeyTransport{
    58  		APIKey: "bad",
    59  	}
    60  
    61  	newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client())
    62  	if err != nil {
    63  		log.Fatalf("new api client: %s", err.Error())
    64  	}
    65  
    66  	_, resp, err = newcli.Decisions.List(context.Background(), alert)
    67  
    68  	log.Infof("--> %s", err)
    69  	if resp.Response.StatusCode != http.StatusForbidden {
    70  		t.Errorf("Alerts.List returned status: %d, want %d", resp.Response.StatusCode, http.StatusOK)
    71  	}
    72  	assert.Contains(t, err.Error(), "API error: access forbidden")
    73  	//ko empty token
    74  	auth = &APIKeyTransport{}
    75  	newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client())
    76  	if err != nil {
    77  		log.Fatalf("new api client: %s", err.Error())
    78  	}
    79  
    80  	_, resp, err = newcli.Decisions.List(context.Background(), alert)
    81  	require.Error(t, err)
    82  
    83  	log.Infof("--> %s", err)
    84  	assert.Contains(t, err.Error(), "APIKey is empty")
    85  
    86  }