diff --git a/core/tests/Drupal/Core/Config/FileStorageTest.php b/core/tests/Drupal/Core/Config/FileStorageTest.php
new file mode 100644
index 0000000..d40debf
--- /dev/null
+++ b/core/tests/Drupal/Core/Config/FileStorageTest.php
@@ -0,0 +1,176 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\config\Tests\Storage\FileStorageTest.
+ */
+
+namespace Drupal\config\Tests\Storage;
+
+use org\bovigo\vfs\vfsStreamFile;
+
+use Drupal\Core\Config\FileStorage;
+use Drupal\Core\Testing\UnitTestBase;
+
+use org\bovigo\vfs\vfsStream;
+use org\bovigo\vfs\vfsStreamDirectory;
+use org\bovigo\vfs\vfsStreamWrapper;
+
+/**
+ * Tests FileStorage controller operations.
+ */
+class FileStorageTest extends UnitTestBase {
+
+  /**
+   * The FileStorage object under test.
+   *
+   * @var FileStorage
+   */
+  protected $storage;
+
+  public function setUp() {
+    vfsStreamWrapper::register();
+    vfsStreamWrapper::setRoot(new vfsStreamDirectory('config'));
+
+    $this->storage = new FileStorage(vfsStream::url('config'));
+  }
+
+  /**
+   * Tests the getFilePath function.
+   */
+  public function testGetFilePath() {
+    $this->assertEquals('vfs://config/dummy.yml', $this->storage->getFilePath('dummy'));
+  }
+
+  /**
+   * Tests the exists function.
+   */
+  public function testExists() {
+    $name = 'config_test.storage';
+
+    // Checking whether a non-existing name exists returns FALSE.
+    $this->assertSame(FALSE, $this->storage->exists('config_test.storage'));
+
+    // Checking whether an existing name exists returns TRUE.
+    $this->insert($name, '');
+    $this->assertSame(TRUE, $this->storage->exists($name));
+  }
+
+  /**
+   * Tests the read function.
+   */
+  public function testRead() {
+    $name = 'config_test.storage';
+
+    // Reading a non-existing name returns FALSE.
+    $data = $this->storage->read($name);
+    $this->assertSame(FALSE, $data);
+
+    // Reading a name containing non-decodeable data returns FALSE.
+    $this->insert($name, '');
+    $data = $this->storage->read($name);
+    $this->assertSame(FALSE, $data);
+
+    $this->update($name, 'foo');
+    $data = $this->storage->read($name);
+    $this->assertSame(FALSE, $data);
+
+    $this->update($name, "foo: bar\n");
+    $this->assertSame(array('foo' => 'bar'), $this->storage->read($name));
+  }
+
+  /**
+   * Tests the write function.
+   */
+  public function testWrite() {
+    $name = 'config_test.storage';
+
+    // Writing data returns TRUE and the data has been written.
+    $data = array('foo' => 'bar');
+    $result = $this->storage->write($name, $data);
+    $this->assertSame(TRUE, $result);
+
+    $raw_data = $this->read($name);
+    $this->assertSame("foo: bar\n", $raw_data);
+
+    // Writing the identical data again still returns TRUE.
+    $result = $this->storage->write($name, $data);
+    $this->assertSame(TRUE, $result);
+  }
+
+  /**
+   * Tests the listAll function.
+   *
+   * This function is skipped: see https://github.com/mikey179/vfsStream/issues/2.
+   * The use of glob in the implementation is incompatible with the vfsStream.
+   */
+  public function testListAll() {
+    $name = 'config_test.storage';
+
+    $this->markTestSkipped('This test is skipped due to the use of glob() function.');
+    /*
+    $this->insert($name, '');
+    $this->insert('system.performance.yml', '');
+
+    // Listing all names returns all.
+    $names = $this->storage->listAll();
+    $this->assertTrue(in_array('system.performance', $names));
+    $this->assertTrue(in_array($name, $names));
+
+    // Listing all names with prefix returns names with that prefix only.
+    $names = $this->storage->listAll('config_test.');
+    $this->assertFalse(in_array('system.performance', $names));
+    $this->assertTrue(in_array($name, $names));
+    */
+  }
+
+  /**
+   * Tests the rename function.
+   */
+  public function testRename() {
+    $name = 'config_test.storage';
+
+    $this->insert($name, 'dummy');
+
+    // Rename the configuration storage object.
+    $new_name = 'config_test.storage_rename';
+    $this->storage->rename($name, $new_name);
+    $raw_data = $this->read($new_name);
+    $this->assertSame('dummy', $raw_data);
+  }
+
+  /**
+   * Tests the delete function.
+   */
+  public function testDelete() {
+    $name = 'config_test.storage';
+    $this->insert($name, 'dummy');
+
+    $this->markTestIncomplete('This test has not beed implemented yet.');
+    /*
+    // Deleting an existing name returns TRUE.
+    $result = $this->storage->delete($name);
+    $this->assertSame(TRUE, $result);
+
+    // Deleting a non-existing name returns FALSE.
+    $result = $this->storage->delete($name);
+    $this->assertSame(FALSE, $result);
+    */
+  }
+
+  private function read($name) {
+    return vfsStreamWrapper::getRoot()->getChild("$name.yml")->getContent();
+  }
+
+  private function insert($name, $data) {
+    $file = vfsStream::newFile("$name.yml");
+    $file->setContent($data);
+    vfsStreamWrapper::getRoot()->addChild($file);
+  }
+
+  private function update($name, $data) {
+    $file = vfsStreamWrapper::getRoot()->getChild("$name.yml");
+    $file->setContent($data);
+  }
+
+}
