+// Size of the "virtual" disk that
+// we want to test.
+#define BUF_TEST_LEN 3209
+
+// Buffer for test
+typedef uint8_t fake_t;
+fake_t test_buf[BUF_TEST_LEN];
+fake_t test_buf_save[BUF_TEST_LEN];
+fake_t test_disk[BUF_TEST_LEN];
+
+KFile fd;
+
+/*
+ * Beckend to use kfile structure on pc.
+ */
+static int fake_close(KFile *fd)
+{
+ (void)fd;
+ return 0;
+}
+
+static size_t fake_read(KFile *fd, void *buf, size_t size)
+{
+ fake_t *dest = (fake_t *)buf;
+ size_t rd_len;
+
+ rd_len = MIN((kfile_off_t)size, fd->size - fd->seek_pos);
+
+ memcpy(dest, test_disk, size);
+ fd->seek_pos += rd_len;
+
+ LOG_INFO("Read: real[%zd] expected[%zd]\n", rd_len, size);
+
+ return rd_len;
+}
+
+static size_t fake_write(KFile *fd, const void *buf, size_t size)
+{
+ const fake_t *src = (const fake_t *)buf;
+ size_t wr_len;
+
+ wr_len = MIN((kfile_off_t)size, fd->size - fd->seek_pos);
+
+ memcpy(test_disk, src, wr_len);
+ fd->seek_pos += wr_len;
+
+ LOG_INFO("Write: real[%zd] expected[%zd]\n", wr_len, size);
+
+ return wr_len;
+}
+
+static int fake_flush(KFile *fd)
+{
+ (void)fd;
+
+ return 0;
+}
+
+static void fake_kfileInit(void)
+{
+ // Setup data flash programming functions.
+ fd.reopen = kfile_genericReopen;
+ fd.close = fake_close;
+ fd.read = fake_read;
+ fd.write = fake_write;
+ fd.seek = kfile_genericSeek;
+ fd.flush = fake_flush;
+
+ fd.seek_pos = 0;
+ fd.size = BUF_TEST_LEN;
+
+}
+
+/*
+ * Help function to init disk and the buffers.
+ */
+static void init_testBuf(void)
+{
+
+ kprintf("Init fake buffer..\n");
+ for (int i = 0; i < BUF_TEST_LEN; i++)
+ {
+ test_disk[i] = i;
+ kprintf("%d ", test_disk[i]);
+ }
+ kprintf("\nend\n");
+
+ memset(test_buf, 0, sizeof(test_buf));
+ memset(test_buf_save, 0, sizeof(test_buf_save));
+}