fleet/cmd/fleetctl/generate_test.go
Roberto Dip f7665297fc
fix fleetctl generate mdm-apple-bm (#19507)
for #19506

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

<!-- Note that API documentation changes are now addressed by the
product design team. -->

- [x] Added/updated tests
- [x] Manual QA for all new/changed functionality
2024-06-04 18:19:09 -03:00

89 lines
2.2 KiB
Go

package main
import (
"crypto/x509"
"encoding/pem"
"fmt"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
func TestGenerateMDMAppleBM(t *testing.T) {
outdir, err := os.MkdirTemp("", t.Name())
require.NoError(t, err)
defer os.Remove(outdir)
publicKeyPath := filepath.Join(outdir, "public-key.crt")
_, _ = runServerWithMockedDS(t)
out := runAppForTest(t, []string{
"generate", "mdm-apple-bm",
"--public-key", publicKeyPath,
})
require.Contains(t, out, fmt.Sprintf("Generated your public key at %s", outdir))
// validate that the certificate is valid
certPEM, err := os.ReadFile(publicKeyPath)
require.NoError(t, err)
block, _ := pem.Decode(certPEM)
require.NotNil(t, block)
require.Equal(t, "CERTIFICATE", block.Type)
parsed, err := x509.ParseCertificate(block.Bytes)
require.NoError(t, err)
require.NotNil(t, parsed)
}
func TestGenerateMDMApple(t *testing.T) {
t.Run("CSR API call fails", func(t *testing.T) {
_, _ = runServerWithMockedDS(t)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// fail this call
w.WriteHeader(http.StatusBadRequest)
_, _ = w.Write([]byte("bad request"))
}))
t.Setenv("TEST_FLEETDM_API_URL", srv.URL)
t.Cleanup(srv.Close)
runAppCheckErr(
t,
[]string{
"generate", "mdm-apple",
},
ErrGeneric.Error(),
)
})
t.Run("successful run", func(t *testing.T) {
_, _ = runServerWithMockedDS(t)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(`{"csr": "dGVzdAo="}`))
}))
t.Setenv("TEST_FLEETDM_API_URL", srv.URL)
t.Cleanup(srv.Close)
outdir, err := os.MkdirTemp("", "TestGenerateMDMApple")
require.NoError(t, err)
defer os.Remove(outdir)
csrPath := filepath.Join(outdir, "csr.csr")
out := runAppForTest(t, []string{
"generate", "mdm-apple",
"--csr", csrPath,
"--debug",
"--context", "default",
})
require.Contains(t, out, fmt.Sprintf("Generated your certificate signing request (CSR) at %s", csrPath))
// validate that the CSR is valid
csrPEM, err := os.ReadFile(csrPath)
require.NoError(t, err)
require.Equal(t, "test\n", string(csrPEM))
})
}