Skip to content

Commit

Permalink
Adds support for deleting DDoSX domains
Browse files Browse the repository at this point in the history
  • Loading branch information
0x4c6565 committed May 17, 2019
1 parent 16172b4 commit aa969f6
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 0 deletions.
1 change: 1 addition & 0 deletions pkg/service/ddosx/service.go
Expand Up @@ -15,6 +15,7 @@ type DDoSXService interface {
GetDomainsPaginated(parameters connection.APIRequestParameters) ([]Domain, error)
GetDomain(domainName string) (Domain, error)
CreateDomain(req CreateDomainRequest) error
DeleteDomain(domainName string) error
DeployDomain(domainName string) error

GetDomainRecords(domainName string, parameters connection.APIRequestParameters) ([]Record, error)
Expand Down
28 changes: 28 additions & 0 deletions pkg/service/ddosx/service_domain.go
Expand Up @@ -96,6 +96,34 @@ func (s *Service) createDomainResponseBody(req CreateDomainRequest) (*connection
return body, response.HandleResponse(body, nil)
}

// DeleteDomain removes a domain
func (s *Service) DeleteDomain(domainName string) error {
_, err := s.deleteDomainResponseBody(domainName)

return err
}

func (s *Service) deleteDomainResponseBody(domainName string) (*connection.APIResponseBody, error) {
body := &connection.APIResponseBody{}

if domainName == "" {
return body, fmt.Errorf("invalid domain name")
}

response, err := s.connection.Delete(fmt.Sprintf("/ddosx/v1/domains/%s", domainName), nil)
if err != nil {
return body, err
}

return body, response.HandleResponse(body, func(resp *connection.APIResponse) error {
if response.StatusCode == 404 {
return &DomainNotFoundError{Name: domainName}
}

return nil
})
}

// DeployDomain deploys/commits changes to a domain
func (s *Service) DeployDomain(domainName string) error {
_, err := s.deployDomainResponseBody(domainName)
Expand Down
81 changes: 81 additions & 0 deletions pkg/service/ddosx/service_domain_test.go
Expand Up @@ -265,6 +265,87 @@ func TestCreateDomain(t *testing.T) {
})
}

func TestDeleteDomain(t *testing.T) {
t.Run("Valid", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

c := mocks.NewMockConnection(mockCtrl)

s := Service{
connection: c,
}

c.EXPECT().Delete("/ddosx/v1/domains/testdomain1.co.uk", nil).Return(&connection.APIResponse{
Response: &http.Response{
Body: ioutil.NopCloser(bytes.NewReader([]byte("{}"))),
StatusCode: 204,
},
}, nil).Times(1)

err := s.DeleteDomain("testdomain1.co.uk")

assert.Nil(t, err)
})

t.Run("ConnectionError_ReturnsError", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

c := mocks.NewMockConnection(mockCtrl)

s := Service{
connection: c,
}

c.EXPECT().Delete("/ddosx/v1/domains/testdomain1.co.uk", nil).Return(&connection.APIResponse{}, errors.New("test error 1")).Times(1)

err := s.DeleteDomain("testdomain1.co.uk")

assert.NotNil(t, err)
assert.Equal(t, "test error 1", err.Error())
})

t.Run("InvalidDomainName_ReturnsError", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

c := mocks.NewMockConnection(mockCtrl)

s := Service{
connection: c,
}

err := s.DeleteDomain("")

assert.NotNil(t, err)
assert.Equal(t, "invalid domain name", err.Error())
})

t.Run("404_ReturnsDomainNotFoundError", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

c := mocks.NewMockConnection(mockCtrl)

s := Service{
connection: c,
}

c.EXPECT().Delete("/ddosx/v1/domains/testdomain1.co.uk", nil).Return(&connection.APIResponse{
Response: &http.Response{
Body: ioutil.NopCloser(bytes.NewReader([]byte(""))),
StatusCode: 404,
},
}, nil).Times(1)

err := s.DeleteDomain("testdomain1.co.uk")

assert.NotNil(t, err)
assert.IsType(t, &DomainNotFoundError{}, err)
})
}

func TestDeployDomain(t *testing.T) {
t.Run("Valid", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
Expand Down

0 comments on commit aa969f6

Please sign in to comment.