github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/certs_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/http"
     7  	"os"
     8  	"testing"
     9  
    10  	"github.com/drycc/controller-sdk-go/api"
    11  	"github.com/drycc/workflow-cli/pkg/testutil"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestCertsList(t *testing.T) {
    16  	t.Parallel()
    17  	cf, server, err := testutil.NewTestServerAndClient()
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  	defer server.Close()
    22  	var b bytes.Buffer
    23  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
    24  
    25  	server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) {
    26  		testutil.SetHeaders(w)
    27  		fmt.Fprintf(w, `{
    28  			"count": 4,
    29  			"next": null,
    30  			"previous": null,
    31  			"results": [
    32  				{
    33  					"name": "test-example-com",
    34  					"common_name": "test.example.com",
    35  					"san": [
    36  						"test.com",
    37  						"example.com"
    38  					],
    39  					"domains": [
    40  						"test.com",
    41  						"example.com"
    42  					],
    43  					"created": "2016-06-09T00:00:00UTC",
    44  					"updated": "2016-06-09T00:00:00UTC",
    45  					"expires": "2014-11-10T00:00:00UTC",
    46  					"fingerprint": "12:34:56:78:90"
    47  				},
    48  				{
    49  					"name": "test-drycc-com",
    50  					"common_name": "test.drycc.com",
    51  					"created": "2016-06-09T00:00:00UTC",
    52  					"updated": "2016-06-09T00:00:00UTC",
    53  					"expires": "2016-08-01T00:00:00UTC",
    54  					"fingerprint": "ab:12:ab:12:ab"
    55  				},
    56  				{
    57  					"name": "test1",
    58  					"common_name": "1.test.drycc.com",
    59  					"expires": "2016-06-11T00:00:00UTC"
    60  				},
    61  				{
    62  					"name": "test2",
    63  					"common_name": "2.test.drycc.com",
    64  					"expires": "2018-01-01T00:00:00UTC"
    65  				}
    66  			]
    67  		}`)
    68  	})
    69  
    70  	err = cmdr.CertsList(-1)
    71  	assert.NoError(t, err)
    72  
    73  	assert.Equal(t, b.String(), `NAME                COMMON-NAME         EXPIRES        SAN                     DOMAINS              
    74  test-example-com    test.example.com    10 Nov 2014    test.com,example.com    test.com,example.com    
    75  test-drycc-com      test.drycc.com      1 Aug 2016     <none>                  <none>                  
    76  test1               1.test.drycc.com    11 Jun 2016    <none>                  <none>                  
    77  test2               2.test.drycc.com    1 Jan 2018     <none>                  <none>                  
    78  `, "output")
    79  
    80  	cf, server, err = testutil.NewTestServerAndClient()
    81  	if err != nil {
    82  		t.Fatal(err)
    83  	}
    84  	defer server.Close()
    85  
    86  	cmdr.ConfigFile = cf
    87  	b.Reset()
    88  
    89  	server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) {
    90  		testutil.SetHeaders(w)
    91  		fmt.Fprintf(w, `{
    92  			"count": 0,
    93  			"next": null,
    94  			"previous": null,
    95  			"results": []
    96  		}`)
    97  	})
    98  
    99  	err = cmdr.CertsList(-1)
   100  	assert.NoError(t, err)
   101  
   102  	assert.Equal(t, b.String(), "No certs\n", "output")
   103  }
   104  
   105  func TestCertsListLimit(t *testing.T) {
   106  	t.Parallel()
   107  	cf, server, err := testutil.NewTestServerAndClient()
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  	defer server.Close()
   112  	var b bytes.Buffer
   113  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   114  
   115  	server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, _ *http.Request) {
   116  		testutil.SetHeaders(w)
   117  		fmt.Fprintf(w, `{
   118  			"count": 4,
   119  			"next": null,
   120  			"previous": null,
   121  			"results": [
   122  				{
   123  					"name": "test-example-com",
   124  					"common_name": "test.example.com",
   125  					"san": [
   126  						"test.com",
   127  						"drycc.com",
   128  						"example.com"
   129  					],
   130  					"domains": [
   131  						"test.com",
   132  						"drycc.com",
   133  						"example.com"
   134  					],
   135  					"created": "2016-06-09T00:00:00UTC",
   136  					"updated": "2016-06-09T00:00:00UTC",
   137  					"expires": "2014-11-10T00:00:00UTC",
   138  					"fingerprint": "12:34:56:78:90"
   139  				}
   140  			]
   141  		}`)
   142  	})
   143  
   144  	err = cmdr.CertsList(1)
   145  	assert.NoError(t, err)
   146  
   147  	assert.Equal(t, b.String(), `NAME                COMMON-NAME         EXPIRES        SAN                               DOMAINS                        
   148  test-example-com    test.example.com    10 Nov 2014    test.com,drycc.com,example.com    test.com,drycc.com,example.com    
   149  `, "output")
   150  
   151  }
   152  
   153  func TestCertsInfo(t *testing.T) {
   154  	t.Parallel()
   155  	cf, server, err := testutil.NewTestServerAndClient()
   156  	if err != nil {
   157  		t.Fatal(err)
   158  	}
   159  	defer server.Close()
   160  	var b bytes.Buffer
   161  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   162  
   163  	server.Mux.HandleFunc("/v2/certs/test-example-com", func(w http.ResponseWriter, _ *http.Request) {
   164  		testutil.SetHeaders(w)
   165  		fmt.Fprintf(w, `{
   166  			"name": "test-example-com",
   167  			"owner": "admin",
   168  			"issuer": "testca",
   169  			"subject": "testing",
   170  			"common_name": "test.drycc.com",
   171  			"created": "2016-06-09T00:00:00UTC",
   172  			"updated": "2016-06-09T00:00:00UTC",
   173  			"expires": "2016-06-09T00:00:00UTC",
   174  			"starts": "2016-06-09T00:00:00UTC",
   175  			"fingerprint": "ab:12:ab:12:ab",
   176  			"san": [
   177  				"test.com",
   178  				"example.com"
   179  			],
   180  			"domains": [
   181  				"test.com",
   182  				"example.com"
   183  			]
   184  		}`)
   185  	})
   186  
   187  	err = cmdr.CertInfo("test-example-com")
   188  	assert.NoError(t, err)
   189  	assert.Equal(t, b.String(), `Name:                 test-example-com        
   190  Common Name(s):       test.drycc.com          
   191  Expires At:           9 Jun 2016              
   192  Starts At:            9 Jun 2016              
   193  Fingerprint:          ab:12:ab:12:ab          
   194  Subject Alt Name:     test.com,example.com    
   195  Issuer:               testca                  
   196  Subject:              testing                 
   197                        
   198  Connected Domains:    test.com,example.com    
   199  Owner:                admin                   
   200  Created:              2016-06-09T00:00:00Z    
   201  Updated:              2016-06-09T00:00:00Z    
   202  `, "output")
   203  
   204  	server.Mux.HandleFunc("/v2/certs/test-drycc-com", func(w http.ResponseWriter, _ *http.Request) {
   205  		testutil.SetHeaders(w)
   206  		fmt.Fprintf(w, `{
   207  			"name": "test-drycc-com"
   208  		}`)
   209  	})
   210  	b.Reset()
   211  
   212  	err = cmdr.CertInfo("test-drycc-com")
   213  	assert.NoError(t, err)
   214  	assert.Equal(t, b.String(), `Name:                 test-drycc-com    
   215  Common Name(s):       <none>            
   216  Expires At:           <none>            
   217  Starts At:            <none>            
   218  Fingerprint:          <none>            
   219  Subject Alt Name:     <none>            
   220  Issuer:               <none>            
   221  Subject:              <none>            
   222                        
   223  Connected Domains:    <none>            
   224  Owner:                <none>            
   225  Created:              <none>            
   226  Updated:              <none>            
   227  `, "output")
   228  }
   229  
   230  func TestCertsRemove(t *testing.T) {
   231  	t.Parallel()
   232  	cf, server, err := testutil.NewTestServerAndClient()
   233  	if err != nil {
   234  		t.Fatal(err)
   235  	}
   236  	defer server.Close()
   237  	var b bytes.Buffer
   238  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   239  
   240  	server.Mux.HandleFunc("/v2/certs/test-example-com", func(w http.ResponseWriter, _ *http.Request) {
   241  		testutil.SetHeaders(w)
   242  		w.WriteHeader(http.StatusNoContent)
   243  	})
   244  
   245  	err = cmdr.CertRemove("test-example-com")
   246  	assert.NoError(t, err)
   247  
   248  	assert.Equal(t, testutil.StripProgress(b.String()), "Removing test-example-com... done\n", "output")
   249  }
   250  
   251  func TestCertsAttach(t *testing.T) {
   252  	t.Parallel()
   253  	cf, server, err := testutil.NewTestServerAndClient()
   254  	if err != nil {
   255  		t.Fatal(err)
   256  	}
   257  	defer server.Close()
   258  	var b bytes.Buffer
   259  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   260  
   261  	server.Mux.HandleFunc("/v2/certs/test-example-com/domain/", func(w http.ResponseWriter, r *http.Request) {
   262  		testutil.SetHeaders(w)
   263  		testutil.AssertBody(t, api.CertAttachRequest{Domain: "drycc.com"}, r)
   264  		w.WriteHeader(http.StatusCreated)
   265  	})
   266  
   267  	err = cmdr.CertAttach("test-example-com", "drycc.com")
   268  	assert.NoError(t, err)
   269  
   270  	assert.Equal(t, testutil.StripProgress(b.String()), "Attaching certificate test-example-com to domain drycc.com... done\n", "output")
   271  }
   272  
   273  func TestCertsDetach(t *testing.T) {
   274  	t.Parallel()
   275  	cf, server, err := testutil.NewTestServerAndClient()
   276  	if err != nil {
   277  		t.Fatal(err)
   278  	}
   279  	defer server.Close()
   280  	var b bytes.Buffer
   281  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   282  
   283  	server.Mux.HandleFunc("/v2/certs/test-example-com/domain/drycc.com", func(w http.ResponseWriter, _ *http.Request) {
   284  		testutil.SetHeaders(w)
   285  		w.WriteHeader(http.StatusNoContent)
   286  	})
   287  
   288  	err = cmdr.CertDetach("test-example-com", "drycc.com")
   289  	assert.NoError(t, err)
   290  
   291  	assert.Equal(t, testutil.StripProgress(b.String()), "Detaching certificate test-example-com from domain drycc.com... done\n", "output")
   292  }
   293  
   294  func TestCertsAdd(t *testing.T) {
   295  	t.Parallel()
   296  	cf, server, err := testutil.NewTestServerAndClient()
   297  	if err != nil {
   298  		t.Fatal(err)
   299  	}
   300  	defer server.Close()
   301  	var b bytes.Buffer
   302  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   303  
   304  	server.Mux.HandleFunc("/v2/certs/", func(w http.ResponseWriter, r *http.Request) {
   305  		testutil.SetHeaders(w)
   306  		testutil.AssertBody(t, api.CertCreateRequest{Certificate: "cert", Key: "key", Name: "testcert"}, r)
   307  		w.WriteHeader(http.StatusCreated)
   308  		fmt.Fprintf(w, "{}")
   309  	})
   310  
   311  	keyFile, err := os.CreateTemp("", "drycc-cli-unit-test-key")
   312  	assert.NoError(t, err)
   313  	_, err = keyFile.Write([]byte("key"))
   314  	assert.NoError(t, err)
   315  	keyFile.Close()
   316  
   317  	certFile, err := os.CreateTemp("", "drycc-cli-unit-test-cert")
   318  	assert.NoError(t, err)
   319  	_, err = certFile.Write([]byte("cert"))
   320  	assert.NoError(t, err)
   321  	certFile.Close()
   322  
   323  	err = cmdr.CertAdd(certFile.Name(), keyFile.Name(), "testcert")
   324  	assert.NoError(t, err)
   325  
   326  	assert.Equal(t, testutil.StripProgress(b.String()), "Adding SSL endpoint... done\n", "output")
   327  }