diff --git a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php b/core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php
similarity index 30%
rename from core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
rename to core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php
index f0e4a7b..44dbe99 100644
--- a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
+++ b/core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php
@@ -1,54 +1,29 @@
 <?php
 
-namespace Drupal\Tests\dblog\Functional;
+namespace Drupal\dblog\Tests\Rest;
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Url;
-use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
-use Drupal\Tests\rest\Functional\ResourceTestBase;
+use Drupal\rest\Tests\RESTTestBase;
 
 /**
  * Tests the watchdog database log resource.
  *
  * @group dblog
  */
-class DbLogResourceTest extends ResourceTestBase {
-
-  use CookieResourceTestTrait;
+class DbLogResourceTest extends RESTTestBase {
 
   /**
-   * {@inheritdoc}
-   */
-  protected static $format = 'hal_json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $mimeType = 'application/hal+json';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $auth = 'cookie';
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $resourceConfigId = 'dblog';
-
-  /**
-   * {@inheritdoc}
+   * Modules to enable.
+   *
+   * @var array
    */
   public static $modules = ['hal', 'dblog'];
 
-  /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
+  protected function setUp() {
     parent::setUp();
-
-    $auth = isset(static::$auth) ? [static::$auth] : [];
-    $this->provisionResource([static::$format], $auth);
+    // Enable REST API for the watchdog resource.
+    $this->enableService('dblog');
   }
 
   /**
@@ -61,66 +36,30 @@ public function testWatchdog() {
     $id = db_query_range("SELECT wid FROM {watchdog} WHERE type = :type ORDER BY wid DESC", 0, 1, [':type' => 'rest'])
       ->fetchField();
 
-    $this->initAuthentication();
-    $url = Url::fromRoute('rest.dblog.GET.' . static::$format, ['id' => $id, '_format' => static::$format]);
-    $request_options = $this->getAuthenticationRequestOptions('GET');
-
-    $response = $this->request('GET', $url, $request_options);
-    $this->assertResourceErrorResponse(403, "The 'restful get dblog' permission is required.", $response);
-
     // Create a user account that has the required permissions to read
     // the watchdog resource via the REST API.
-    $this->setUpAuthorization('GET');
+    $account = $this->drupalCreateUser(['restful get dblog']);
+    $this->drupalLogin($account);
 
-    $response = $this->request('GET', $url, $request_options);
-    $this->assertResourceResponse(200, FALSE, $response, ['config:rest.resource.dblog', 'config:rest.settings', 'http_response'], ['user.permissions'], FALSE, 'MISS');
-    $log = Json::decode((string) $response->getBody());
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => $id, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(200);
+    $this->assertHeader('content-type', $this->defaultMimeType);
+    $log = Json::decode($response);
     $this->assertEqual($log['wid'], $id, 'Log ID is correct.');
     $this->assertEqual($log['type'], 'rest', 'Type of log message is correct.');
     $this->assertEqual($log['message'], 'Test message', 'Log message text is correct.');
 
     // Request an unknown log entry.
-    $url->setRouteParameter('id', 9999);
-    $response = $this->request('GET', $url, $request_options);
-    $this->assertResourceErrorResponse(404, 'Log entry with ID 9999 was not found', $response);
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 9999, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(404);
+    $decoded = Json::decode($response);
+    $this->assertEqual($decoded['message'], 'Log entry with ID 9999 was not found', 'Response message is correct.');
 
     // Make a bad request (a true malformed request would never be a route match).
-    $url->setRouteParameter('id', 0);
-    $response = $this->request('GET', $url, $request_options);
-    $this->assertResourceErrorResponse(400, 'No log entry ID was provided', $response);
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 0, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(400);
+    $decoded = Json::decode($response);
+    $this->assertEqual($decoded['message'], 'No log entry ID was provided', 'Response message is correct.');
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUpAuthorization($method) {
-    switch ($method) {
-      case 'GET':
-        $this->grantPermissionsToTestedRole(['restful get dblog']);
-        break;
-
-      default:
-        throw new \UnexpectedValueException();
-    }
-  }
-  /**
-   * {@inheritdoc}
-   */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedUnauthorizedAccessMessage($method) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedBcUnauthorizedAccessMessage($method) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getExpectedUnauthorizedAccessCacheability() {}
-
 }
