# Integration test

This folder contains the integration test for Milvus components.

## How to run integration test locally

Integration test still need some thirdparty components to start:

```bash
cd [milvus-folder]/deployments/docker/dev && docker-compose up -d
```

Run following script to start the full integration test:
```bash
cd [milvus-folder]
make milvus # milvus needs to be compiled to make cpp build ready
./scripts/run_intergration_test.sh
```

If you want to run single test case, you could execute command like this example

```bash
# mq, etcd, minio ready before
cd [milvus-folder]
source scripts/setenv.sh
cd tests/integration/[testcase-folder]/
go test -run "$testCaseName^" -testify.m "$subTestifyCaseName^" -race -v
```

## Recommended coding style for add new cases


### Using `suite`

MiniCluster` and `MiniClusterSuite` provides lots of comment preset tool function to execute intergration test.

It is recommend to add a new test with `testify/suite`

```go

import (
    // ...
    "github.com/milvus-io/milvus/tests/integration"
)

type NewSuite struct {
    integration.MiniClusterSuite
}


// Setups and teardowns, optional if no custom logic needed
// example to suite setup & teardown, same logic applies to test setup&teardown

func (s *NewSuite) SetupSuite() {
    s.MiniClusterSuite.SetupSuite()
    // customized setup
}

func (s *NewSuite) TearDownSuite() {
    s.MiniClusterSuite.TearDownSuite()
    // customized teardown
}

```

### New folder for each new scenario

It's a known issue that integration test cases run in same process might affect due to some singleton component not fully cleaned.

As a temp solution, test cases are separated into different packages to run independently. 
