diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..1615af4
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,7 @@
+language: go
+
+go:
+- 1.13
+- master
+
+script: make test
diff --git a/Makefile b/Makefile
index 1c70360..855aadd 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,11 @@
 cloudstack-ccm: ${CMD_SRC}
 	go build -ldflags ${LDFLAGS} -o $@ $^
 
+test:
+	go test -v
+	go vet
+	@(echo "gofmt -l"; FMTFILES="$$(gofmt -l .)"; if test -n "$${FMTFILES}"; then echo "Go files that need to be reformatted (use 'go fmt'):\n$${FMTFILES}"; exit 1; fi)
+
 docker:
 	docker build . -t apache/cloudstack-kubernetes-provider:${GIT_COMMIT_SHORT}
 	docker tag apache/cloudstack-kubernetes-provider:${GIT_COMMIT_SHORT} apache/cloudstack-kubernetes-provider:latest
diff --git a/cloudstack_loadbalancer.go b/cloudstack_loadbalancer.go
index 2b30483..dbf6dd3 100644
--- a/cloudstack_loadbalancer.go
+++ b/cloudstack_loadbalancer.go
@@ -168,7 +168,7 @@
 
 		if lbRule != nil {
 			klog.V(4).Infof("Creating firewall rules for load balancer rule: %v (%v:%v:%v)", lbRuleName, protocol, lbRule.Publicip, port.Port)
-			if _ , err := lb.updateFirewallRule(lbRule.Publicipid, int(port.Port), protocol, service.Spec.LoadBalancerSourceRanges); err != nil {
+			if _, err := lb.updateFirewallRule(lbRule.Publicipid, int(port.Port), protocol, service.Spec.LoadBalancerSourceRanges); err != nil {
 				return nil, err
 			}
 		}
@@ -600,29 +600,29 @@
 //
 // Thanks to: https://stackoverflow.com/a/36000696
 func compareStringSlice(x, y []string) bool {
-    if len(x) != len(y) {
-        return false
-    }
-    // create a map of string -> int
-    diff := make(map[string]int, len(x))
-    for _, _x := range x {
-        // 0 value for int is 0, so just increment a counter for the string
-        diff[_x]++
-    }
-    for _, _y := range y {
-        // If the string _y is not in diff bail out early
-        if _, ok := diff[_y]; !ok {
-            return false
-        }
-        diff[_y] -= 1
-        if diff[_y] == 0 {
-            delete(diff, _y)
-        }
-    }
-    if len(diff) == 0 {
-        return true
-    }
-    return false
+	if len(x) != len(y) {
+		return false
+	}
+	// create a map of string -> int
+	diff := make(map[string]int, len(x))
+	for _, _x := range x {
+		// 0 value for int is 0, so just increment a counter for the string
+		diff[_x]++
+	}
+	for _, _y := range y {
+		// If the string _y is not in diff bail out early
+		if _, ok := diff[_y]; !ok {
+			return false
+		}
+		diff[_y] -= 1
+		if diff[_y] == 0 {
+			delete(diff, _y)
+		}
+	}
+	if len(diff) == 0 {
+		return true
+	}
+	return false
 }
 
 func ruleToString(rule *cloudstack.FirewallRule) string {
diff --git a/cmd/cloudstack-ccm/main.go b/cmd/cloudstack-ccm/main.go
index 06fb4e1..b787fb4 100644
--- a/cmd/cloudstack-ccm/main.go
+++ b/cmd/cloudstack-ccm/main.go
@@ -30,7 +30,7 @@
 	"k8s.io/component-base/logs"
 	"k8s.io/kubernetes/cmd/cloud-controller-manager/app"
 	_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
-	_ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration
+	_ "k8s.io/kubernetes/pkg/version/prometheus"        // for version metric registration
 
 	"github.com/spf13/pflag"
 
diff --git a/protocol.go b/protocol.go
index 0fd6afe..5673ffb 100644
--- a/protocol.go
+++ b/protocol.go
@@ -33,14 +33,14 @@
 // Returns "" if the value is unknown.
 func (p LoadBalancerProtocol) CSProtocol() string {
 	switch p {
-		case LoadBalancerProtocolTCP:
-			return "tcp"
-		case LoadBalancerProtocolUDP:
-			return "udp"
-		case LoadBalancerProtocolTCPProxy:
-			return "tcp-proxy"
-		default:
-			return ""
+	case LoadBalancerProtocolTCP:
+		return "tcp"
+	case LoadBalancerProtocolUDP:
+		return "udp"
+	case LoadBalancerProtocolTCPProxy:
+		return "tcp-proxy"
+	default:
+		return ""
 	}
 }
 
@@ -48,14 +48,14 @@
 // Returns "" if the value is unknown.
 func (p LoadBalancerProtocol) IPProtocol() string {
 	switch p {
-		case LoadBalancerProtocolTCP:
-			fallthrough
-		case LoadBalancerProtocolTCPProxy:
-			return "tcp"
-		case LoadBalancerProtocolUDP:
-			return "udp"
-		default:
-			return ""
+	case LoadBalancerProtocolTCP:
+		fallthrough
+	case LoadBalancerProtocolTCPProxy:
+		return "tcp"
+	case LoadBalancerProtocolUDP:
+		return "udp"
+	default:
+		return ""
 	}
 }
 
@@ -93,13 +93,13 @@
 // CloudStack load balancer protocol name.
 func ProtocolFromLoadBalancer(protocol string) LoadBalancerProtocol {
 	switch protocol {
-		case "tcp":
-			return LoadBalancerProtocolTCP
-		case "udp":
-			return LoadBalancerProtocolUDP
-		case "tcp-proxy":
-			return LoadBalancerProtocolTCPProxy
-		default:
-			return LoadBalancerProtocolInvalid
+	case "tcp":
+		return LoadBalancerProtocolTCP
+	case "udp":
+		return LoadBalancerProtocolUDP
+	case "tcp-proxy":
+		return LoadBalancerProtocolTCPProxy
+	default:
+		return LoadBalancerProtocolInvalid
 	}
 }
