Added testcases for upload_manager
diff --git a/upload_manager_test.go b/upload_manager_test.go new file mode 100644 index 0000000..e0033e9 --- /dev/null +++ b/upload_manager_test.go
@@ -0,0 +1,111 @@ +package apidAnalytics + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "io/ioutil" + "os" + "path/filepath" + "strconv" +) + +var _ = Describe("test handleUploadDirStatus()", func() { + Context("successful upload", func() { + It("should delete dir from staging and remove entry from map", func() { + dirName := "testorg~testenv~20160101530000" + dirPath := filepath.Join(localAnalyticsStagingDir, dirName) + + err := os.Mkdir(dirPath, os.ModePerm) + Expect(err).ShouldNot(HaveOccurred()) + + info, e := os.Stat(dirPath) + Expect(e).ShouldNot(HaveOccurred()) + handleUploadDirStatus(info, true) + + status, _ := exists(dirPath) + Expect(status).To(BeFalse()) + _, exists := retriesMap[dirName] + Expect(exists).To(BeFalse()) + }) + }) + Context("unsuccessful upload", func() { + It("retry thrice before moving to failed", func() { + dirName := "testorg~testenv~20160101530000" + dirPath := filepath.Join(localAnalyticsStagingDir, dirName) + + err := os.Mkdir(dirPath, os.ModePerm) + Expect(err).ShouldNot(HaveOccurred()) + + info, e := os.Stat(dirPath) + Expect(e).ShouldNot(HaveOccurred()) + + // Retry thrice + for i := 1; i < maxRetries; i++ { + handleUploadDirStatus(info, false) + + status, _ := exists(dirPath) + Expect(status).To(BeTrue()) + + cnt, exists := retriesMap[dirName] + Expect(exists).To(BeTrue()) + Expect(cnt).To(Equal(i)) + } + + // after final retry, it should be moved to failed + handleUploadDirStatus(info, false) + + failedPath := filepath.Join(localAnalyticsFailedDir, dirName) + + status, _ := exists(failedPath) + Expect(status).To(BeTrue()) + + _, exists := retriesMap[dirName] + Expect(exists).To(BeFalse()) + }) + }) +}) + +var _ = Describe("test retryFailedUploads()", func() { + Context("previously failed directories in failed folder", func() { + It("should be moved to staging directory", func() { + dirName := "testorg~testenv~20160101830000" + dirPath := filepath.Join(localAnalyticsFailedDir, dirName) + + err := os.Mkdir(dirPath, os.ModePerm) + Expect(err).ShouldNot(HaveOccurred()) + + retryFailedUploads() + + stagingPath := filepath.Join(localAnalyticsStagingDir, dirName) + + // move from failed to staging directory + status, _ := exists(dirPath) + Expect(status).To(BeFalse()) + + status, _ = exists(stagingPath) + Expect(status).To(BeTrue()) + }) + It("if multiple folders, then move only configured batch at a time", func() { + for i := 1; i < (retryFailedDirBatchSize * 2); i++ { + dirName := "testorg~testenv" + strconv.Itoa(i) + "~2016010183000" + dirPath := filepath.Join(localAnalyticsFailedDir, dirName) + err := os.Mkdir(dirPath, os.ModePerm) + Expect(err).ShouldNot(HaveOccurred()) + } + + // before count failed + dirs, _ := ioutil.ReadDir(localAnalyticsFailedDir) + failedDirCntBefore := len(dirs) + + retryFailedUploads() + + // after count failed + dirs, _ = ioutil.ReadDir(localAnalyticsFailedDir) + failedDirCntAfter := len(dirs) + + Expect(failedDirCntBefore - failedDirCntAfter). + To(Equal(retryFailedDirBatchSize)) + + }) + }) +})