Skip to content

Commit

Permalink
add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
justmiles committed Mar 22, 2022
1 parent f89a3ae commit 5b2fa87
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ steps:
- name: test
image: golang
commands:
- go test
- go test -v -failfast -cover ./lib
- go build
12 changes: 12 additions & 0 deletions lib/history_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package lib

import "testing"

func TestSum(t *testing.T) {
he := HistoricalExecution{}

err := RenderHistoryResults([]HistoricalExecution{he}, "csv")
if err != nil {
t.Errorf("Unable to render as %s", "csv")
}
}
10 changes: 4 additions & 6 deletions lib/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/athena"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/dustin/go-humanize"
"github.com/olekukonko/tablewriter"
csvmap "github.com/recursionpharma/go-csv-map"
Expand Down Expand Up @@ -45,7 +44,7 @@ func (q *Query) Execute() (*os.File, error) {
if _, err := os.Stat(q.SQL); err == nil {
queryFromFile, err := ioutil.ReadFile(q.SQL)
if err != nil {
return nil, fmt.Errorf("Unable to read query from file %s", q.SQL)
return nil, fmt.Errorf("unable to read query from file %s", q.SQL)
}
q.SQL = string(queryFromFile)
}
Expand Down Expand Up @@ -99,10 +98,9 @@ func (q *Query) Execute() (*os.File, error) {

file, err := ioutil.TempFile("", "athena-query-results-"+*result.QueryExecutionId)
if err != nil {
return nil, fmt.Errorf("Unable to create temp file %q, %v", *result.QueryExecutionId, err)
return nil, fmt.Errorf("unable to create temp file %q, %v", *result.QueryExecutionId, err)
}

downloader := s3manager.NewDownloader(sess)
numBytes, err := downloader.Download(file, &s3.GetObjectInput{
Bucket: aws.String(q.QueryResultsBucket),
Key: aws.String(*result.QueryExecutionId + ".csv"),
Expand All @@ -112,11 +110,11 @@ func (q *Query) Execute() (*os.File, error) {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
case s3.ErrCodeNoSuchBucket:
return nil, fmt.Errorf("Unable to download query results for %q. Bucket %s does not exist", *result.QueryExecutionId, q.QueryResultsBucket)
return nil, fmt.Errorf("unable to download query results for %q. Bucket %s does not exist", *result.QueryExecutionId, q.QueryResultsBucket)
case s3.ErrCodeNoSuchKey:
return nil, nil
default:
return nil, fmt.Errorf("Unable to download query results for %q, %v", *result.QueryExecutionId, err)
return nil, fmt.Errorf("unable to download query results for %q, %v", *result.QueryExecutionId, err)
}
}
}
Expand Down
31 changes: 31 additions & 0 deletions lib/query_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package lib

import (
"fmt"
"testing"
)

func init() {
svc = &mockAthenaClient{}
downloader = &mockDownloaderAPI{}
}

func Test_QueryExecute(t *testing.T) {
q := Query{
Database: "default",
SQL: "SELECT 1",
OutputFile: "/dev/stdout",
QueryResultsBucket: "test",
Format: "csv",
Statistics: false,
}

f, err := q.Execute()
if err != nil {
t.Errorf("Could note Execute() query: %v", err.Error())
return
}

fmt.Println(f.Name())

}
10 changes: 9 additions & 1 deletion lib/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import (

"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/athena"
"github.com/aws/aws-sdk-go/service/athena/athenaiface"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/service/s3/s3manager/s3manageriface"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/sirupsen/logrus"
)
Expand All @@ -16,15 +19,20 @@ var (
sess = session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
svc = athena.New(sess)
svc athenaiface.AthenaAPI
downloader s3manageriface.DownloaderAPI
)

func init() {
svc = athena.New(sess)
downloader = s3manager.NewDownloader(sess)

lvl, ok := os.LookupEnv("LOG_LEVEL")
// LOG_LEVEL not set, let's default to info
if !ok {
lvl = "info"
}

// parse string, this is built-in feature of logrus
ll, err := logrus.ParseLevel(lvl)
if err != nil {
Expand Down
45 changes: 45 additions & 0 deletions lib/util_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package lib

import (
"io"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/athena"
"github.com/aws/aws-sdk-go/service/athena/athenaiface"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/service/s3/s3manager/s3manageriface"
)

// Define a mock struct to be used in your unit tests of myFunc.
type mockAthenaClient struct {
athenaiface.AthenaAPI
}

func (m *mockAthenaClient) StartQueryExecution(input *athena.StartQueryExecutionInput) (*athena.StartQueryExecutionOutput, error) {
// mock response/functionality
return &athena.StartQueryExecutionOutput{
QueryExecutionId: aws.String("xxxyyyzzz"),
}, nil
}

func (m *mockAthenaClient) GetQueryExecution(input *athena.GetQueryExecutionInput) (*athena.GetQueryExecutionOutput, error) {
// mock response/functionality
return &athena.GetQueryExecutionOutput{
QueryExecution: &athena.QueryExecution{
QueryExecutionId: aws.String("xxxyyyzzz"),
Status: &athena.QueryExecutionStatus{
State: aws.String(athena.QueryExecutionStateSucceeded),
},
},
}, nil
}

// mock the downloader
type mockDownloaderAPI struct {
s3manageriface.DownloaderAPI
}

func (m *mockDownloaderAPI) Download(io.WriterAt, *s3.GetObjectInput, ...func(*s3manager.Downloader)) (int64, error) {
return 100, nil
}

0 comments on commit 5b2fa87

Please sign in to comment.