diff --git a/buffering_manager_test.go b/buffering_manager_test.go
index 5378604..fa4ad85 100644
--- a/buffering_manager_test.go
+++ b/buffering_manager_test.go
@@ -96,6 +96,9 @@
 			Expect(record["response_status_code"]).To(Equal(json.Number("200")))
 			Expect(record["client_received_start_timestamp"]).To(Equal(json.Number("1486406248277")))
 			Expect(record["client_received_end_timestamp"]).To(Equal(json.Number("1486406248290")))
+
+			err = os.Remove(completeFilePath)
+			Expect(err).ToNot((HaveOccurred()))
 		})
 	})
 })
diff --git a/crash_recovery_test.go b/crash_recovery_test.go
new file mode 100644
index 0000000..68bb5e6
--- /dev/null
+++ b/crash_recovery_test.go
@@ -0,0 +1,166 @@
+package apidAnalytics
+
+import (
+	"compress/gzip"
+	"encoding/json"
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+	"io/ioutil"
+	"os"
+	"path/filepath"
+	"strings"
+)
+
+var _ = Describe("test crashRecoveryNeeded(), ", func() {
+	Context("directories in recovered folder", func() {
+		It("should return true", func() {
+			dirName := "t~e~20160108536000~recoveredTS~20160101222612.123"
+			dirPath := filepath.Join(localAnalyticsRecoveredDir, dirName)
+
+			err := os.Mkdir(dirPath, os.ModePerm)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			needed := crashRecoveryNeeded()
+			Expect(needed).To(BeTrue())
+
+			err = os.Remove(dirPath)
+			Expect(err).ShouldNot(HaveOccurred())
+		})
+	})
+	Context("directories in tmp folder", func() {
+		It("should return true", func() {
+			d := "t~e~20160112630000"
+			dirPath := filepath.Join(localAnalyticsTempDir, d)
+			fp := filepath.Join(dirPath, "fakefile.txt.gz")
+			err := os.Mkdir(dirPath, os.ModePerm)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			_, err = os.Create(fp)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			needed := crashRecoveryNeeded()
+			Expect(needed).To(BeTrue())
+
+			// moves file to recovered dir
+			dirs, _ := ioutil.ReadDir(localAnalyticsRecoveredDir)
+			for _, dir := range dirs {
+				if strings.Contains(dir.Name(), d) {
+					Expect(dir.Name()).To(
+						ContainSubstring(d + recoveredTS))
+					err = os.RemoveAll(localAnalyticsRecoveredDir +
+						"/" + dir.Name())
+					Expect(err).ShouldNot(HaveOccurred())
+				}
+			}
+		})
+	})
+})
+
+var _ = Describe("test performRecovery(), ", func() {
+	It("should move all recovered directories to staging", func() {
+		dirName := "t~e~20160101545000~recoveredTS~20160101222612.123"
+		dirPath := filepath.Join(localAnalyticsRecoveredDir, dirName)
+		err := os.Mkdir(dirPath, os.ModePerm)
+		Expect(err).ShouldNot(HaveOccurred())
+
+		performRecovery()
+		newPath := filepath.Join(localAnalyticsStagingDir, dirName)
+		Expect(newPath).To(BeADirectory())
+
+		err = os.Remove(newPath)
+		Expect(err).ShouldNot(HaveOccurred())
+	})
+})
+
+var _ = Describe("test recoverDirectory(), ", func() {
+	It("should recover file and move folder to staging", func() {
+		dirName := "t~e~20160101535000~recoveredTS~20160101222612.123"
+		dirPath := filepath.Join(localAnalyticsRecoveredDir, dirName)
+		fp := filepath.Join(dirPath, "fakefile.txt.gz")
+		err := os.Mkdir(dirPath, os.ModePerm)
+		Expect(err).ShouldNot(HaveOccurred())
+
+		recoveredFile, err := os.OpenFile(fp,
+			os.O_WRONLY|os.O_CREATE, os.ModePerm)
+		Expect(err).ShouldNot(HaveOccurred())
+
+		gw := gzip.NewWriter(recoveredFile)
+
+		// write some content to file
+		var records = []byte(`{
+					"response_status_code": 200,
+					"client_id":"testapikey",
+					"client_received_start_timestamp": 1486406248277,
+					"client_received_end_timestamp": 1486406248290
+				}`)
+		gw.Write(records)
+		gw.Close()
+		recoveredFile.Close()
+
+		recoverDirectory(dirName)
+
+		stagingPath := filepath.Join(localAnalyticsStagingDir, dirName)
+		Expect(dirPath).ToNot(BeADirectory())
+		Expect(stagingPath).To(BeADirectory())
+
+		err = os.RemoveAll(stagingPath)
+		Expect(err).ShouldNot(HaveOccurred())
+	})
+})
+
+var _ = Describe("test recoverFile(), ", func() {
+	It("should create a recovered file and delete parital file", func() {
+		dirName := "t~e~20160101530000~recoveredTS~20160101222612.123"
+		dirPath := filepath.Join(localAnalyticsRecoveredDir, dirName)
+		fp := filepath.Join(dirPath, "fakefile.txt.gz")
+		err := os.Mkdir(dirPath, os.ModePerm)
+		Expect(err).ShouldNot(HaveOccurred())
+
+		recoveredFile, err := os.OpenFile(fp,
+			os.O_WRONLY|os.O_CREATE, os.ModePerm)
+		Expect(err).ShouldNot(HaveOccurred())
+
+		gw := gzip.NewWriter(recoveredFile)
+
+		// write some content to file
+		var records = []byte(`{
+					"response_status_code": 200,
+					"client_id":"testapikey",
+					"client_received_start_timestamp": 1486406248277,
+					"client_received_end_timestamp": 1486406248290
+				}`)
+		gw.Write(records)
+		gw.Close()
+		recoveredFile.Close()
+
+		recoverFile("_20160101222612.123", dirName, "fakefile.txt.gz")
+
+		recoveredFileName := "fakefile_recovered_20160101222612.123.txt.gz"
+		recoveredFilePath := filepath.Join(dirPath, recoveredFileName)
+		Expect(recoveredFilePath).To(BeAnExistingFile())
+		Expect(fp).ToNot(BeAnExistingFile())
+
+		// Verify file was written to properly
+		f, err := os.Open(recoveredFilePath)
+		defer f.Close()
+		gzReader, err := gzip.NewReader(f)
+		defer gzReader.Close()
+		Expect(err).ToNot((HaveOccurred()))
+
+		var record map[string]interface{}
+		decoder := json.NewDecoder(gzReader) // Decode payload to JSON data
+		decoder.UseNumber()
+		err = decoder.Decode(&record)
+		Expect(err).ToNot((HaveOccurred()))
+
+		Expect(record["client_id"]).To(Equal("testapikey"))
+		Expect(record["response_status_code"]).To(Equal(json.Number("200")))
+		Expect(record["client_received_start_timestamp"]).
+			To(Equal(json.Number("1486406248277")))
+		Expect(record["client_received_end_timestamp"]).
+			To(Equal(json.Number("1486406248290")))
+
+		err = os.RemoveAll(dirPath)
+		Expect(err).ShouldNot(HaveOccurred())
+	})
+})
