diff --git a/test/external_storer_file_test.cpp b/test/external_storer_file_test.cpp
index 3cba35d..c0f2578 100644
--- a/test/external_storer_file_test.cpp
+++ b/test/external_storer_file_test.cpp
@@ -15,6 +15,7 @@
 
 using ::testing::_;
 using ::testing::DoAll;
+using ::testing::InSequence;
 using ::testing::Return;
 using ::testing::SaveArg;
 
@@ -26,6 +27,7 @@
     MOCK_METHOD(bool, createFile,
                 (const std::string& path, const nlohmann::json& jsonPdr),
                 (const, override));
+    MOCK_METHOD(bool, removeAll, (const std::string& path), (const, override));
 };
 
 class ExternalStorerFileTest : public ::testing::Test
@@ -36,8 +38,9 @@
         mockFileWriter(std::make_unique<MockFileWriter>())
     {
         mockFileWriterPtr = dynamic_cast<MockFileWriter*>(mockFileWriter.get());
+        // Set the queue of LogEntry to 1 saved entry and 2 non saved entry
         exStorer = std::make_unique<ExternalStorerFileInterface>(
-            conn, rootPath, std::move(mockFileWriter));
+            conn, rootPath, std::move(mockFileWriter), 1, 2);
     }
 
   protected:
@@ -127,6 +130,7 @@
 
 TEST_F(ExternalStorerFileTest, LogEntryTest)
 {
+    InSequence s;
     // Before sending a LogEntry, first we need to push a LogService.
     std::string jsonLogSerivce = R"(
       {
@@ -146,19 +150,62 @@
         .WillOnce(Return(true));
     EXPECT_THAT(exStorer->publishJson(jsonLogSerivce), true);
 
-    // Now send a LogEntry
+    // Now send a LogEntry#1, which will not be deleted
     std::string jsonLogEntry = R"(
       {
         "@odata.id": "/some/odata/id",
         "@odata.type": "#LogEntry.v1_13_0.LogEntry"
       }
     )";
-
     nlohmann::json logEntryOut;
+    std::string logPath1;
     EXPECT_CALL(*mockFileWriterPtr, createFile(_, _))
-        .WillOnce(DoAll(SaveArg<1>(&logEntryOut), Return(true)));
-
+        .WillOnce(DoAll(SaveArg<0>(&logPath1), SaveArg<1>(&logEntryOut),
+                        Return(true)));
     EXPECT_THAT(exStorer->publishJson(jsonLogEntry), true);
+    EXPECT_FALSE(logPath1.empty());
+    EXPECT_NE(logEntryOut["Id"], nullptr);
+    EXPECT_EQ(logEntryOut["@odata.id"], nullptr);
+
+    // Now send a LogEntry#2, which will be the first to be deleted
+    std::string logPath2;
+    EXPECT_CALL(*mockFileWriterPtr, createFile(_, _))
+        .WillOnce(DoAll(SaveArg<0>(&logPath2), SaveArg<1>(&logEntryOut),
+                        Return(true)));
+    EXPECT_THAT(exStorer->publishJson(jsonLogEntry), true);
+    EXPECT_FALSE(logPath2.empty());
+    EXPECT_NE(logEntryOut["Id"], nullptr);
+    EXPECT_EQ(logEntryOut["@odata.id"], nullptr);
+
+    // Now send a LogEntry#3
+    std::string logPath3;
+    EXPECT_CALL(*mockFileWriterPtr, createFile(_, _))
+        .WillOnce(DoAll(SaveArg<0>(&logPath3), SaveArg<1>(&logEntryOut),
+                        Return(true)));
+    EXPECT_THAT(exStorer->publishJson(jsonLogEntry), true);
+    EXPECT_FALSE(logPath3.empty());
+    EXPECT_NE(logEntryOut["Id"], nullptr);
+    EXPECT_EQ(logEntryOut["@odata.id"], nullptr);
+
+    // Now send a LogEntry#4, we expect the LogEntry#2 to be deleted
+    std::string logPath4;
+    EXPECT_CALL(*mockFileWriterPtr, removeAll(logPath2)).WillOnce(Return(true));
+    EXPECT_CALL(*mockFileWriterPtr, createFile(_, _))
+        .WillOnce(DoAll(SaveArg<0>(&logPath4), SaveArg<1>(&logEntryOut),
+                        Return(true)));
+    EXPECT_THAT(exStorer->publishJson(jsonLogEntry), true);
+    EXPECT_FALSE(logPath4.empty());
+    EXPECT_NE(logEntryOut["Id"], nullptr);
+    EXPECT_EQ(logEntryOut["@odata.id"], nullptr);
+
+    // Now send a LogEntry#5, we expect the LogEntry#3 to be deleted
+    std::string logPath5;
+    EXPECT_CALL(*mockFileWriterPtr, removeAll(logPath3)).WillOnce(Return(true));
+    EXPECT_CALL(*mockFileWriterPtr, createFile(_, _))
+        .WillOnce(DoAll(SaveArg<0>(&logPath5), SaveArg<1>(&logEntryOut),
+                        Return(true)));
+    EXPECT_THAT(exStorer->publishJson(jsonLogEntry), true);
+    EXPECT_FALSE(logPath5.empty());
     EXPECT_NE(logEntryOut["Id"], nullptr);
     EXPECT_EQ(logEntryOut["@odata.id"], nullptr);
 }
