diff --git a/docs/TriceCacheSpec.md b/docs/TriceCacheSpec.md index 8e620245..cc851d22 100644 --- a/docs/TriceCacheSpec.md +++ b/docs/TriceCacheSpec.md @@ -45,37 +45,30 @@ When `id.TriceCacheEnabled` is true (applied `-cache` CLI switch) and `~/.trice/ ## Tests -Nr | Action | cCache | iCache | ID state | Edid state | Test function ----|----------|---------|---------|------------|------------|-------------- -0 | 0:clean | 0:inval | 0:inval | 0:cleaned | 0:not | T -1 | 0:clean | 0:inval | 0:inval | 0:cleaned | 1:yes | Test_1_00001_clean_on_invalid_cCache_invalid_iCache_cleaned_edited_file -2 | 0:clean | 0:inval | 0:inval | 1:inserted | 0:not | T -3 | 0:clean | 0:inval | 0:inval | 1:inserted | 1:yes | Test_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file -4 | 0:clean | 0:inval | 1:valid | 0:cleaned | 0:not | T -5 | 0:clean | 0:inval | 1:valid | 0:cleaned | 1:yes | -6 | 0:clean | 0:inval | 1:valid | 1:inserted | 0:not | T -7 | 0:clean | 0:inval | 1:valid | 1:inserted | 1:yes | T -8 | 0:clean | 1:valid | 0:inval | 0:cleaned | 0:not | T -9 | 0:clean | 1:valid | 0:inval | 0:cleaned | 1:yes | T -10 | 0:clean | 1:valid | 0:inval | 1:inserted | 0:not | T -11 | 0:clean | 1:valid | 0:inval | 1:inserted | 1:yes | T -12 | 0:clean | 1:valid | 1:valid | 0:cleaned | 0:not | T -13 | 0:clean | 1:valid | 1:valid | 0:cleaned | 1:yes | T -14 | 0:clean | 1:valid | 1:valid | 1:inserted | 0:not | T -15 | 0:clean | 1:valid | 1:valid | 1:inserted | 1:yes | T -16 | 1:insert | 0:inval | 0:inval | 0:cleaned | 0:not | -17 | 1:insert | 0:inval | 0:inval | 0:cleaned | 1:yes | Test_17_10001_insert_on_inalid_cCache_invalid_iCache_clean_edited_file -18 | 1:insert | 0:inval | 0:inval | 1:inserted | 0:not | T -19 | 1:insert | 0:inval | 0:inval | 1:inserted | 1:yes | Test_19_10011_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file -20 | 1:insert | 0:inval | 1:valid | 0:cleaned | 0:not | T -21 | 1:insert | 0:inval | 1:valid | 0:cleaned | 1:yes | -22 | 1:insert | 0:inval | 1:valid | 1:inserted | 0:not | T -23 | 1:insert | 0:inval | 1:valid | 1:inserted | 1:yes | -24 | 1:insert | 1:valid | 0:inval | 0:cleaned | 0:not | T -25 | 1:insert | 1:valid | 0:inval | 0:cleaned | 1:yes | T -26 | 1:insert | 1:valid | 0:inval | 1:inserted | 0:not | T -27 | 1:insert | 1:valid | 0:inval | 1:inserted | 1:yes | T -28 | 1:insert | 1:valid | 1:valid | 0:cleaned | 0:not | T -29 | 1:insert | 1:valid | 1:valid | 0:cleaned | 1:yes | T -30 | 1:insert | 1:valid | 1:valid | 1:inserted | 0:not | T -31 | 1:insert | 1:valid | 1:valid | 1:inserted | 1:yes | T +Nr | Action | cCache | iCache | ID state | Edid state | Test function +------|----------|---------|---------|------------|------------|------------------------------------------------------------------------------ +0,1 | 0:clean | 0:inval | 0:inval | 0:cleaned | X:any | Test_0_1_0000X_clean_on_invalid_cCache_invalid_iCache_cleaned_file +2,3 | 0:clean | 0:inval | 0:inval | 1:inserted | X:any | Test_2_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file +4,5 | 0:clean | 0:inval | 1:valid | 0:cleaned | X:any | Test_4_5_0010X_clean_on_invalid_cCache_valid_iCache_cleaned_file +6 | 0:clean | 0:inval | 1:valid | 1:inserted | 0:not | Test_6_00110_clean_on_invalid_cCache_valid_iCache_inserted_not_edited_file +7 | 0:clean | 0:inval | 1:valid | 1:inserted | 1:yes | Test_7_00111_clean_on_invalid_cCache_valid_iCache_inserted_edited_file +8 | 0:clean | 1:valid | 0:inval | 0:cleaned | 0:not | Test_8_01000_clean_on_valid_cCache_invalid_iCache_cleaned_not_edited_file +9 | 0:clean | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file +10 | 0:clean | 1:valid | 0:inval | 1:inserted | 0:not | Test_10_01011_clean_on_valid_cCache_invalid_iCache_inserted_not_edited_file +11 | 0:clean | 1:valid | 0:inval | 1:inserted | 1:yes | Test_11_01011_clean_on_valid_cCache_invalid_iCache_inserted_edited_file +12 | 0:clean | 1:valid | 1:valid | 0:cleaned | 0:not | Test_12_01100_clean_on_valid_iCache_valid_cCache_clean_file_not_edited +13 | 0:clean | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_13_01101_clean_on_valid_iCache_valid_cCache_clean_file_edited +14 | 0:clean | 1:valid | 1:valid | 1:inserted | 0:not | Test_14_01110_clean_on_valid_iCache_valid_cCache_inserted_file_not_edited +15 | 0:clean | 1:valid | 1:valid | 1:inserted | 1:yes | Test_15_01111_clean_on_valid_iCache_valid_cCache_inserted_file_edited +16,17 | 1:insert | 0:inval | 0:inval | 0:cleaned | X:any | Test_16_17_1000X_insert_on_invalid_cCache_invalid_iCache_cleaned_file +18,19 | 1:insert | 0:inval | 0:inval | 1:inserted | X:any | Test_18_19_1001X_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file +20,21 | 1:insert | 0:inval | 1:valid | 0:cleaned | X:any | Test_20_21_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file +22 | 1:insert | 0:inval | 1:valid | 1:inserted | 0:not | Test_22_10100_insert_on_invalid_cCache_valid_iCache_inserted_not_edited_file +23 | 1:insert | 0:inval | 1:valid | 1:inserted | 1:yes | Test_23_10101_insert_on_invalid_cCache_valid_iCache_inserted_edited_file +24 | 1:insert | 1:valid | 0:inval | 0:cleaned | 0:not | Test_24_11000_insert_on_valid_cCache_invalid_iCache_cleaned_not_edited_file +25 | 1:insert | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_25_11001_insert_on_valid_cCache_invalid_iCache_cleaned_edited_file +26,27 | 1:insert | 1:valid | 0:inval | 1:inserted | X:any | Test_26_27_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file +28 | 1:insert | 1:valid | 1:valid | 0:cleaned | 0:not | Test_28_11100_insert_on_valid_cCache_valid_iCache_cleaned_not_edited_file +29 | 1:insert | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_29_11100_insert_on_valid_cCache_valid_iCache_cleaned_edited_file +30 | 1:insert | 1:valid | 1:valid | 1:inserted | 0:not | T +31 | 1:insert | 1:valid | 1:valid | 1:inserted | 1:yes | T diff --git a/internal/id/cachedClean_test.go b/internal/id/cachedClean_test.go index c3dece25..4d7f6267 100644 --- a/internal/id/cachedClean_test.go +++ b/internal/id/cachedClean_test.go @@ -36,9 +36,9 @@ func TestCleanOnInsertedWithoutCacheFolder(t *testing.T) { assertFileNotExists(t, fSys, iCache) // check for not existing iCache } -func Test_1_00001_clean_on_invalid_cCache_invalid_iCache_cleaned_edited_file(t *testing.T) { +func Test_0_1_0000X_clean_on_invalid_cCache_invalid_iCache_cleaned_file(t *testing.T) { defer setupCacheTest(t)() - assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // cleaned, edit + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // cleaned sT0 := mTime(t, fSys, sFname) // keep mtime assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) @@ -48,9 +48,9 @@ func Test_1_00001_clean_on_invalid_cCache_invalid_iCache_cleaned_edited_file(t * assertFileNotExists(t, fSys, iCache) // check for not existing iCache } -func Test_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file(t *testing.T) { +func Test_2_3_0001X_clean_on_inalid_cCache_invalid_iCache_inserted_X_file(t *testing.T) { defer setupCacheTest(t)() - assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // inserted, edit + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // inserted assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) @@ -59,6 +59,57 @@ func Test_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file(t * assertEqualMTimes(t, fSys, sFname, cCache) // check for correct updated cCache } +func Test_4_5_0010X_clean_on_invalid_cCache_valid_iCache_cleaned_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD999), "msg:value=%d\n", -1);`) // create inserted file + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // edit cleaned file + sT1 := mTime(t, fSys, sFname) // keep mtime + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // check for not modified src file + assert.Equal(t, sT1, mTime(t, fSys, sFname)) // check for untouched sFname + assertEqualMTimes(t, fSys, sFname, cCache) // check for correct cCache + assert.Equal(t, sT0, mTime(t, fSys, iCache)) // check for correct iCache +} + +func Test_6_00110_clean_on_invalid_cCache_valid_iCache_inserted_not_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + + time.Sleep(100 * time.Millisecond) + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) + time.Sleep(100 * time.Millisecond) + + assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // check src file + assert.NotEqual(t, sT0, mTime(t, fSys, sFname)) // check for touched sFname + assertEqualMTimes(t, fSys, sFname, cCache) // check for correct cCache + assert.Equal(t, sT0, mTime(t, fSys, iCache)) // check for correct iCache +} + +func Test_7_00111_clean_on_invalid_cCache_valid_iCache_inserted_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + + assertFileCreate(t, fSys, sFname, `trice(iD(999),"msg:value=%d\n", -2);`) // "edit" src file + sT1 := mTime(t, fSys, sFname) // keep mtime + + time.Sleep(100 * time.Millisecond) + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) + time.Sleep(100 * time.Millisecond) + + assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // check src file + assert.NotEqual(t, sT1, mTime(t, fSys, sFname)) // check for touched sFname + assertEqualMTimes(t, fSys, sFname, cCache) // check for correct cCache + assert.Equal(t, sT0, mTime(t, fSys, iCache)) // check for correct iCache +} + func Test_8_01000_clean_on_valid_cCache_invalid_iCache_cleaned_not_edited_file(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create src file @@ -79,7 +130,9 @@ func Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file(t *te id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // "edit" src file - sT1 := mTime(t, fSys, sFname) // keep mtime + time.Sleep(100 * time.Millisecond) + + sT1 := mTime(t, fSys, sFname) // keep mtime assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // check for not modified src file @@ -88,33 +141,43 @@ func Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file(t *te assertFileNotExists(t, fSys, iCache) // check for not existing iCache } -func Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file____TestCleanOnCleanedFileWithValidCCache(t *testing.T) { +func Test_10_01011_clean_on_valid_cCache_invalid_iCache_inserted_not_edited_file(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create src file - sFNameMTime := mTime(t, fSys, sFname) // keep mtime + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + time.Sleep(100 * time.Millisecond) - // status: invalid iCache && invalid cCache here && file edited - assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) // trice clean first time + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) + time.Sleep(100 * time.Millisecond) - // status: invalid iCache && valid cCache here && file NOT edited - assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) // trice clean second time + assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // check for unchanged src file + assert.Equal(t, sT0, mTime(t, fSys, sFname)) // check for untouched sFname + assertEqualMTimes(t, fSys, sFname, cCache) // check for untouched cCache + assertFileContent(t, fSys, cCache, `trice("msg:value=%d\n", -1);`) // check for correct cCache + assertFileNotExists(t, fSys, iCache) // check for not existing iCache +} - assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) - assert.Equal(t, sFNameMTime, mTime(t, fSys, sFname)) // check for untouched sFname - assertEqualMTimes(t, fSys, sFname, cCache) // check for correct updated cCache - assertFileNotExists(t, fSys, iCache) // check for not existing iCache +func Test_11_01011_clean_on_valid_cCache_invalid_iCache_inserted_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create src file + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + time.Sleep(100 * time.Millisecond) - assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // "edit" src file - sFNameMTime = mTime(t, fSys, sFname) // keep mtime - assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) // trice clean again + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // inserted, edit file + time.Sleep(100 * time.Millisecond) + sT1 := mTime(t, fSys, sFname) // keep mtime + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "clean", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-src", sFname})) + time.Sleep(100 * time.Millisecond) - assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // check for not modified src file - assert.Equal(t, sFNameMTime, mTime(t, fSys, sFname)) // check for untouched sFname + assertFileContent(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // check for cleaned src file + assert.NotEqual(t, sT1, mTime(t, fSys, sFname)) // check for touched sFname assertEqualMTimes(t, fSys, sFname, cCache) // check for correct updated cCache + assertFileContent(t, fSys, cCache, `trice("msg:value=%d\n", -2);`) // check for correct cCache assertFileNotExists(t, fSys, iCache) // check for not existing iCache } -func TestClean_On_valid_iCache_valid_cCache_inserted_file_not_edited(t *testing.T) { +func Test_14_01110_clean_on_valid_iCache_valid_cCache_inserted_file_not_edited(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // cleaned file @@ -141,7 +204,7 @@ func TestClean_On_valid_iCache_valid_cCache_inserted_file_not_edited(t *testing. assertEqualMTimes(t, fSys, cCache, sFname) // check for valid cCache } -func TestClean_On_valid_iCache_valid_cCache_clean_file_not_edited(t *testing.T) { +func Test_12_01100_clean_on_valid_iCache_valid_cCache_clean_file_not_edited(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // inserted file @@ -167,7 +230,7 @@ func TestClean_On_valid_iCache_valid_cCache_clean_file_not_edited(t *testing.T) assertEqualMTimes(t, fSys, cCache, sFname) // check for valid cCache } -func TestClean_On_valid_iCache_valid_cCache_inserted_file_edited(t *testing.T) { +func Test_15_01111_clean_on_valid_iCache_valid_cCache_inserted_file_edited(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // cleaned file @@ -200,7 +263,7 @@ func TestClean_On_valid_iCache_valid_cCache_inserted_file_edited(t *testing.T) { assertEqualMTimes(t, fSys, cCache, sFname) // check for valid cCache } -func TestClean_On_valid_iCache_valid_cCache_clean_file_edited(t *testing.T) { +func Test_13_01101_clean_on_valid_iCache_valid_cCache_clean_file_edited(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // inserted file diff --git a/internal/id/cachedInsert_test.go b/internal/id/cachedInsert_test.go index 560168c1..627a9508 100644 --- a/internal/id/cachedInsert_test.go +++ b/internal/id/cachedInsert_test.go @@ -36,18 +36,19 @@ func TestInsertOnInsertedWithoutCacheFolder(t *testing.T) { assertFileNotExists(t, fSys, iCache) // check for not existing iCache } -func Test_17_10001_insert_on_inalid_cCache_invalid_iCache_clean_edited_file(t *testing.T) { +func Test_16_17_1000X_insert_on_invalid_cCache_invalid_iCache_cleaned_file(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // cleaned, edit - + sT0 := mTime(t, fSys, sFname) // keep mtime + time.Sleep(100 * time.Millisecond) assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) - assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check file content + assertNotMTime(t, fSys, sT0, sFname) // check for touched sFname assertFileNotExists(t, fSys, cCache) // check for not existing cCache assertEqualMTimes(t, fSys, sFname, iCache) // check for correct updated iCache } -func Test_19_10011_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file(t *testing.T) { +func Test_18_19_1001X_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // inserted, edit sT0 := mTime(t, fSys, sFname) // keep mtime @@ -60,7 +61,148 @@ func Test_19_10011_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file( assertEqualMTimes(t, fSys, sFname, iCache) // check for correct updated iCache } -func TestInsertOnInsertedFileWithValidCCache(t *testing.T) { +func Test_20_21_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + iT0 := mTime(t, fSys, iCache) // keep mtime + time.Sleep(100 * time.Millisecond) // This time is needed to sync sFname to disc before changing it again. + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create cleaned file + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for modified src file + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -1);`) // check for unchanged iCache + assertFileNotExists(t, fSys, cCache) // check for not existing cCache + assert.NotEqual(t, iT0, mTime(t, fSys, iCache)) // check for updated iCache, because the file is edited, the iCache was invalidated and re-created +} + +func Test_22_10100_insert_on_invalid_cCache_valid_iCache_inserted_not_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + iT0 := mTime(t, fSys, iCache) // keep mtime + time.Sleep(100 * time.Millisecond) // This time is needed to sync sFname to disc before changing it again. + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for modified src file + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -1);`) // check for unchanged iCache + assertFileNotExists(t, fSys, cCache) // check for not existing cCache + assert.Equal(t, iT0, mTime(t, fSys, iCache)) // check for untouched iCache +} + +func Test_23_10101_insert_on_invalid_cCache_valid_iCache_inserted_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + iT0 := mTime(t, fSys, iCache) // keep mtime + time.Sleep(100 * time.Millisecond) // This time is needed to sync sFname to disc before changing it again. + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // edit file + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // check for modified src file + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -2);`) // check for changed iCache + assertFileNotExists(t, fSys, cCache) // check for not existing cCache + assert.NotEqual(t, iT0, mTime(t, fSys, iCache)) // check for updated iCache, because the file is edited, the iCache was invalidated and re-created +} + +func Test_24_11000_insert_on_valid_cCache_invalid_iCache_cleaned_not_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create src file + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc before changing it again. + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for modified src file + assert.NotEqual(t, sT0, mTime(t, fSys, sFname)) // check for touched sFname + assert.Equal(t, sT0, mTime(t, fSys, cCache)) // check for untouched cCache + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for correct iCache + assertEqualMTimes(t, fSys, sFname, iCache) // check for correct iCache +} + +func Test_25_11001_insert_on_valid_cCache_invalid_iCache_cleaned_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create src file + sT0 := mTime(t, fSys, sFname) // keep mtime + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // edit src file + // sT1 := mTime(t, fSys, sFname) // keep mtime + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc before changing it again. + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // check for modified src file + assert.NotEqual(t, sT0, mTime(t, fSys, sFname)) // check for touched sFname + assertMTime(t, fSys, sT0, cCache) // check for untouched cCache + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // check for correct iCache + assertEqualMTimes(t, fSys, sFname, iCache) // check for correct iCache +} + +func Test_26_27_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc + iT0 := mTime(t, fSys, iCache) // keep mtime + time.Sleep(100 * time.Millisecond) // This time is needed to sync sFname to disc before changing it again. + assertFileCreate(t, fSys, sFname, `trice( "msg:value=%d\n", -1);`) // create cleaned file + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for modified src file + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -1);`) // check for unchanged iCache + assertFileNotExists(t, fSys, cCache) // check for not existing cCache + assert.NotEqual(t, iT0, mTime(t, fSys, iCache)) // check for touched iCache +} + +func Test_28_11100_insert_on_valid_cCache_valid_iCache_cleaned_not_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create cleaned file + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc to ensure mtime of cCache and iCache are not equal. + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + + id.CopyFileWithMTime(fSys, sFname, cCache) // create cleaned not edited file + + cT0 := mTime(t, fSys, cCache) // keep mtime + iT0 := mTime(t, fSys, iCache) // keep mtime + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // check for modified src file + assert.Equal(t, iT0, mTime(t, fSys, iCache)) // check for equal mtime with iCache + assertFileContent(t, fSys, cCache, `trice("msg:value=%d\n", -1);`) // check for unchanged cCache + assert.Equal(t, cT0, mTime(t, fSys, cCache)) // check for touched iCache + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -1);`) // check for unchanged iCache + assert.Equal(t, iT0, mTime(t, fSys, iCache)) // check for touched iCache +} + +func Test_29_11100_insert_on_valid_cCache_valid_iCache_cleaned_edited_file(t *testing.T) { + defer setupCacheTest(t)() + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -1);`) // create cleaned file + id.CopyFileWithMTime(fSys, cCache, sFname) // create valid cCache + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc to ensure mtime of cCache and iCache are not equal. + assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create inserted file + id.CopyFileWithMTime(fSys, iCache, sFname) // create valid iCache + + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc to ensure mtime of cCache and iCache are not equal. + assertFileCreate(t, fSys, sFname, `trice("msg:value=%d\n", -2);`) // create cleaned edited file + time.Sleep(100 * time.Millisecond) // This time is needed to sync to disc to ensure mtime of cCache and iCache are not equal. + + iT0 := mTime(t, fSys, iCache) // keep mtime + + assert.Nil(t, args.Handler(io.Writer(&b), fSys, []string{"trice", "insert", "-cache", "-til", id.FnJSON, "-li", id.LIFnJSON, "-IDMin", "999", "-IDMax", "999", "-src", sFname})) + + assertFileContent(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -2);`) // check for modified src file + assertFileContent(t, fSys, iCache, `trice(iD(999), "msg:value=%d\n", -2);`) // check for changed iCache + assert.NotEqual(t, iT0, mTime(t, fSys, iCache)) // check for touched iCache + assertFileNotExists(t, fSys, cCache) // check for invalid cCache +} + +func InsertOnInsertedFileWithValidCCache(t *testing.T) { defer setupCacheTest(t)() assertFileCreate(t, fSys, sFname, `trice(iD(999), "msg:value=%d\n", -1);`) // create src file sFNameMTime := mTime(t, fSys, sFname) // keep mtime