function StandardPerformanceTest::testLogin

Same name and namespace in other branches
  1. 10 core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php \Drupal\Tests\standard\FunctionalJavascript\StandardPerformanceTest::testLogin()

Tests the performance of logging in.

1 call to StandardPerformanceTest::testLogin()
StandardPerformanceTest::testStandardPerformance in core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php
Tests performance of the standard profile.

File

core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php, line 332

Class

StandardPerformanceTest
Tests the performance of basic functionality in the standard profile.

Namespace

Drupal\Tests\standard\FunctionalJavascript

Code

protected function testLogin() : void {
  // Create a user and log them in to warm all caches. Manually submit the
  // form so that we repeat the same steps when recording performance data. Do
  // this twice so that any caches which take two requests to warm are also
  // covered.
  for ($i = 0; $i < 2; $i++) {
    $this->drupalGet('node');
    $this->drupalGet('user/login');
    $this->submitLoginForm($this->user);
    $this->drupalLogout();
  }
  $this->drupalGet('node');
  $this->drupalGet('user/login');
  $performance_data = $this->collectPerformanceData(function () {
    $this->submitLoginForm($this->user);
  }, 'standardLogin');
  $expected_queries = [
    'SELECT "name", "value" FROM "key_value_expire" WHERE "expire" > "NOW" AND "name" IN ( "KEY" ) AND "collection" = "form"',
    'SELECT COUNT(*) AS "expression" FROM (SELECT 1 AS "expression" FROM "flood" "f" WHERE ("event" = "user.failed_login_ip") AND ("identifier" = "CLIENT_IP") AND ("timestamp" > "TIMESTAMP")) "subquery"',
    'SELECT "base_table"."uid" AS "uid", "base_table"."uid" AS "base_table_uid" FROM "users" "base_table" INNER JOIN "users_field_data" "users_field_data" ON "users_field_data"."uid" = "base_table"."uid" WHERE ("users_field_data"."name" IN ("ACCOUNT_NAME")) AND ("users_field_data"."default_langcode" IN (1))',
    'SELECT COUNT(*) AS "expression" FROM (SELECT 1 AS "expression" FROM "flood" "f" WHERE ("event" = "user.failed_login_user") AND ("identifier" = "CLIENT_IP") AND ("timestamp" > "TIMESTAMP")) "subquery"',
    'INSERT INTO "watchdog" ("uid", "type", "message", "variables", "severity", "link", "location", "referer", "hostname", "timestamp") VALUES ("2", "user", "Session opened for %name.", "WATCHDOG_DATA", 6, "", "LOCATION", "REFERER", "CLIENT_IP", "TIMESTAMP")',
    'UPDATE "users_field_data" SET "login"="TIMESTAMP" WHERE "uid" = "2"',
    'SELECT "session" FROM "sessions" WHERE "sid" = "SESSION_ID" LIMIT 0, 1',
    'SELECT 1 AS "expression" FROM "sessions" "sessions" WHERE "sid" = "SESSION_ID"',
    'INSERT INTO "sessions" ("sid", "uid", "hostname", "session", "timestamp") VALUES ("SESSION_ID", "2", "CLIENT_IP", "SESSION_DATA", "TIMESTAMP")',
    'SELECT "session" FROM "sessions" WHERE "sid" = "SESSION_ID" LIMIT 0, 1',
    'SELECT * FROM "users_field_data" "u" WHERE "u"."uid" = "2" AND "u"."default_langcode" = 1',
    'SELECT "roles_target_id" FROM "user__roles" WHERE "entity_id" = "2"',
    'SELECT "base"."uid" AS "uid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode" FROM "users" "base" WHERE "base"."uid" IN (2)',
    'SELECT "data".* FROM "users_field_data" "data" WHERE "data"."uid" IN (2) ORDER BY "data"."uid" ASC',
    'SELECT "t".* FROM "user__roles" "t" WHERE ("entity_id" IN (2)) AND ("deleted" = 0) AND ("langcode" IN ("en", "und", "zxx")) ORDER BY "delta" ASC',
    'SELECT "t".* FROM "user__user_picture" "t" WHERE ("entity_id" IN (2)) AND ("deleted" = 0) AND ("langcode" IN ("en", "und", "zxx")) ORDER BY "delta" ASC',
    'SELECT "name", "value" FROM "key_value" WHERE "name" IN ( "theme:stark" ) AND "collection" = "config.entity.key_store.block"',
  ];
  $recorded_queries = $performance_data->getQueries();
  $this->assertSame($expected_queries, $recorded_queries);
  $expected = [
    'ScriptBytes' => 6500,
    'ScriptCount' => 1,
    'StylesheetBytes' => 1429,
    'StylesheetCount' => 1,
    'QueryCount' => 17,
    'CacheGetCount' => 68,
    'CacheSetCount' => 1,
    'CacheDeleteCount' => 1,
    'CacheTagInvalidationCount' => 0,
    'CacheTagLookupQueryCount' => 13,
    'CacheTagGroupedLookups' => [
      // Form submission and login.
[
        'route_match',
        'access_policies',
        'routes',
        'router',
        'entity_types',
        'entity_field_info',
        'entity_bundles',
        'local_task',
        'library_info',
      ],
      // The user page after the redirect.
[
        'route_match',
        'access_policies',
        'routes',
        'router',
        'entity_types',
        'entity_field_info',
        'entity_bundles',
        'local_task',
        'library_info',
      ],
      [
        'rendered',
        'user:2',
        'user_view',
      ],
      [
        'block_view',
        'config:block.block.stark_site_branding',
        'config:system.site',
      ],
      [
        'CACHE_MISS_IF_UNCACHEABLE_HTTP_METHOD:form',
        'config:block.block.stark_search_form_narrow',
        'config:search.settings',
      ],
      [
        'config:system.menu.account',
        'config:system.menu.main',
      ],
      [
        'config:block.block.stark_search_form_wide',
      ],
      [
        'config:block.block.stark_messages',
      ],
      [
        'config:block.block.stark_help',
      ],
      [
        'config:block.block.stark_powered',
      ],
      [
        'config:block.block.stark_main_menu',
      ],
      [
        'config:block.block.stark_account_menu',
        'config:block.block.stark_breadcrumbs',
        'config:block.block.stark_primary_admin_actions',
      ],
      [
        'config:block.block.stark_primary_local_tasks',
        'config:user.role.authenticated',
        'config:block.block.stark_secondary_local_tasks',
      ],
    ],
  ];
  $this->assertMetrics($expected, $performance_data);
  $this->drupalLogout();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.