[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 39495
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 25012678
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 329357019
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 35550487
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5579395489
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019477140
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 20230263
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 12774916286
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1025670187
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 59041927247
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 51178365
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 63646883
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 43391911
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 54055346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 999449927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 105699425
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1082889
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 43815745
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 6945377
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 11862214133
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018640651
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 734311129
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32944494441
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 77750406
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13215644340
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1107562373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6829239
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1152550
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51542007
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9766294
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 18387299144
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015267258
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 773885427
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32629443763
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 73500911
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13228246747
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 918181056
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6904631
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17083
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1698382
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 60393305
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10169058
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2678450259
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015282597
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 13223753
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2713504776
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019052844
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 49712250997
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 106637273
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 77152674
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 57252128
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 77799837
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 706302747
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5832401
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15530
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1435680
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 81994740215
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 62383757
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 69247670
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 5960108688
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 772687391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5421660
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15269
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1305897
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 34795810304
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 110425082
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 200922605
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 17781022815
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 29089329325
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783757898
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37439
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15229
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2889605
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3879501
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6526886154
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23319603
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 12310674282
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 53076553
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 209602724
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 653250039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73428
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1891625
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2144689
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6514770799
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14528739
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2444575033
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11247589688
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1173309710
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 54652487
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 154555698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 603086115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 71313
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1955986
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1460507
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6644869130
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 215746949
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1476356
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19928228
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2434084281
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10915608671
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 2736142318
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 60265626
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 246358919
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 136739418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783012891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47417859
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11230
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1797328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1268416
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6839943554
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 268366025
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 5784110
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 51742704739
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 747916736
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 72750404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 753845087
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5878968
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1441092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1235466
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7020124526
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1139732162
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 16156961
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 51885313682
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "passed",
              "duration": 1099510390
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 100681540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1022240046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27107954
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2203069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2292165
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53049653
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 11176937
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 806056980
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33908272778
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 327960582
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 71454134
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 533308252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5060254
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1200720
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1236838
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6602003973
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1075708252
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14833249
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 18554917718
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 47616519
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 245848012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 776591938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 4604979
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 25278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2405259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1601852
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6783360198
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 201789029
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 3591705008
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2612766
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 67839069
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13351683
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2233499467
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4631666165
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1277193662
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 15982528582
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 15717053689
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 383281602
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1112180225
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 6297973257
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 389899735
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 51315523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 173257297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 852204026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53158736
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1933564
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2560359
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6738458945
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 179514894
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 3574687354
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 18827796
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 50480567
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2189391643
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4386021402
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1260642123
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:896"
            },
            "result": {
              "status": "passed",
              "duration": 11488219863
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 14878651129
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 372844471
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 255706528
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1115714108
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 35494224565
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 356627126
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 77528127
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 324520415
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 266219261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 746479163
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44065996
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12353
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2162942
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1551618
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6682503035
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1092683395
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16984961
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 7671159210
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 175650
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 366348095
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 738925
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6654020
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 241610180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 775218042
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 730428
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1662456
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6667843091
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2591687
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 27018567
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2280689779
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11373350296
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1216560668
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 7539761
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2126156593
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 404205836
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 603028706
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47257517
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10569
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2001601
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6560134468
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2047476
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18901845
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2282698113
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10432915131
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1262942783
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 5705292
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2131926404
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 225906469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 849092604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58309610
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11591
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2079036
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6686669945
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5714169
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 64534887
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2401465979
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 27661477974
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1266599347
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 5051648
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1093501558
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 215645630
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 875009345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37492356
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1837936
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6851862298
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2367978
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18087199
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2516852168
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10802851910
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 2256212123
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1141"
            },
            "result": {
              "status": "passed",
              "duration": 428388328
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 5066275
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 49610055
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1141"
            },
            "result": {
              "status": "passed",
              "duration": 350273809
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 260210810
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 689790228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36729396
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1934726
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6865086002
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2086611
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19896940
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2450466652
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-moat-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to moat if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1196174632
            }
          },
          {
            "keyword": "And ",
            "name": "the Moat distributor responds with non-default bridges",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:804"
            },
            "result": {
              "status": "passed",
              "duration": 13165585
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 18615815408
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 2345752732
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 5071705
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1075831971
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 338887220
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 793300331
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33085347
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2244317
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6500353643
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 11079293
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 38518740
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2276171790
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1468469839
            }
          },
          {
            "keyword": "And ",
            "name": "the Moat distributor responds with an API error",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:825"
            },
            "result": {
              "status": "passed",
              "duration": 10897572
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 18307668572
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 2683291518
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 5009209
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1073245526
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1141"
            },
            "result": {
              "status": "passed",
              "duration": 349922762
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 61,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 308744499
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 706665133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40917685
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2160800
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6611487091
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2256519
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20554451
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1779946036
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 63,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1417257401
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "failed",
              "error_message": "Expected TCAConnectionFailure to be raised but got TCAConnectionTimeout: Timed out while waiting for TCA to connect to Tor (RuntimeError)\n./features/step_definitions/tor.rb:756:in `rescue in block in <top (required)>'\n./features/step_definitions/tor.rb:751:in `/^I unsuccessfully configure (a direct connection|some .* bridges) in the Tor Connection Assistant$/'\nfeatures/tor_bridges.feature:65:in `When I unsuccessfully configure a direct connection in the Tor Connection Assistant'",
              "duration": 122257185362
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 66,
            "match": {
              "location": "features/step_definitions/tor.rb:896"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:1170"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 73,
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'TCA can reconnect after a connection failure' (at time 00:19:32)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:19:32_TCA_can_reconnect_after_a_connection_failure.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:19:32_TCA_can_reconnect_after_a_connection_failure.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:19:32_TCA_can_reconnect_after_a_connection_failure.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:19:32_TCA_can_reconnect_after_a_connection_failure.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 5163676855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44699924
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11982
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1789184
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6698686754
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2527286
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18648319
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2302566126
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 76,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 75
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3980319332
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:921"
            },
            "result": {
              "status": "passed",
              "duration": 174982059
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 217006750
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 842271068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61137580
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2171900
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6652161013
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2179464
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 45909933
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2407614692
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 82,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 7139361952
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 567208875
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10739860126
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10018995483
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 86,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 57854677
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:391"
            },
            "result": {
              "status": "passed",
              "duration": 1498910007
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 987432921
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:1160"
            },
            "result": {
              "status": "passed",
              "duration": 203560
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 48995735
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 91,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 549443269
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 991523569
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37686489
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1917834
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7060388392
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2050042
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 52430001
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2354899286
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 5788331958
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1959450552
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10713002018
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 97,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1575528881
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10656787264
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 99,
            "match": {
              "location": "features/step_definitions/tor.rb:896"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired\nLast ignored exception was: Dogtail::Failure: The Dogtail init script raised: SearchError: descendant of [application | Tor Connection]: child with name='Error connecting to Tor.*|Error asking for a bridge' roleName='label'\nSTDOUT:\n\nSTDERR:\n\n\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:339:in `initialize'\n./features/support/helpers/dogtail.rb:268:in `new'\n./features/support/helpers/dogtail.rb:268:in `call_tree_api_method'\n./features/support/helpers/dogtail.rb:276:in `child'\n./features/step_definitions/tor.rb:898:in `block (2 levels) in <top (required)>'\n./features/support/helpers/misc_helpers.rb:78:in `block (2 levels) in try_for'\n<internal:kernel>:187:in `loop'\n./features/support/helpers/misc_helpers.rb:66:in `block in try_for'\n./features/support/helpers/misc_helpers.rb:65:in `try_for'\n./features/step_definitions/tor.rb:897:in `block in <top (required)>' (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/tor.rb:897:in `/^the Tor Connection Assistant reports that it failed to connect$/'\nfeatures/tor_bridges.feature:99:in `Then the Tor Connection Assistant reports that it failed to connect'",
              "duration": 120000404517
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Reconnecting from an unblocked network to a blocked network displays an error' (at time 00:23:14)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:23:14_Reconnecting_from_an_unblocked_network_to_a_blocked_network_displays_an_error.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:23:14_Reconnecting_from_an_unblocked_network_to_a_blocked_network_displays_an_error.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:23:14_Reconnecting_from_an_unblocked_network_to_a_blocked_network_displays_an_error.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:23:14_Reconnecting_from_an_unblocked_network_to_a_blocked_network_displays_an_error.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 7399926313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40286694
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1797829
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6844131275
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2361054
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23407009
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2311767395
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1304577733
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 21749895885
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 104,
            "match": {
              "location": "features/step_definitions/tor.rb:896"
            },
            "result": {
              "status": "passed",
              "duration": 171910791
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1607717000
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1106482100
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 7268603070
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 108,
            "match": {
              "location": "features/step_definitions/tor.rb:1141"
            },
            "result": {
              "status": "passed",
              "duration": 481178583
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 109,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 301735107
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 580426907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40243013
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15157
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2608678
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6619632802
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2649656
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 29443710
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1968043953
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 111,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 205291861
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 6241486078
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 7194089759
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2143948112
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1141"
            },
            "result": {
              "status": "passed",
              "duration": 332385272
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 117,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 277081397
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 766291508
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33337997
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1992293
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6635435217
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4298625
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 31158343
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2353875095
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 119,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 120,
            "match": {
              "location": "features/step_definitions/tor.rb:825"
            },
            "result": {
              "status": "passed",
              "duration": 15221582
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 121,
            "match": {
              "location": "features/step_definitions/tor.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 5790374223
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 122,
            "match": {
              "location": "features/step_definitions/tor.rb:896"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired\nLast ignored exception was: Dogtail::Failure: The Dogtail init script raised: SearchError: descendant of [application | Tor Connection]: child with name='Error connecting to Tor.*|Error asking for a bridge' roleName='label'\nSTDOUT:\n\nSTDERR:\n\n\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:339:in `initialize'\n./features/support/helpers/dogtail.rb:268:in `new'\n./features/support/helpers/dogtail.rb:268:in `call_tree_api_method'\n./features/support/helpers/dogtail.rb:276:in `child'\n./features/step_definitions/tor.rb:898:in `block (2 levels) in <top (required)>'\n./features/support/helpers/misc_helpers.rb:78:in `block (2 levels) in try_for'\n<internal:kernel>:187:in `loop'\n./features/support/helpers/misc_helpers.rb:66:in `block in try_for'\n./features/support/helpers/misc_helpers.rb:65:in `try_for'\n./features/step_definitions/tor.rb:897:in `block in <top (required)>' (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/tor.rb:897:in `/^the Tor Connection Assistant reports that it failed to connect$/'\nfeatures/tor_bridges.feature:122:in `Then the Tor Connection Assistant reports that it failed to connect'",
              "duration": 120000379450
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 123,
            "match": {
              "location": "features/step_definitions/tor.rb:904"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Asking for bridge settings but receiving a mocked API error in Tor Connection' (at time 00:26:46)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:26:46_Asking_for_bridge_settings_but_receiving_a_mocked_API_error_in_Tor_Connection.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:26:46_Asking_for_bridge_settings_but_receiving_a_mocked_API_error_in_Tor_Connection.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:26:46_Asking_for_bridge_settings_but_receiving_a_mocked_API_error_in_Tor_Connection.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/00:26:46_Asking_for_bridge_settings_but_receiving_a_mocked_API_error_in_Tor_Connection.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 6201131775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40540515
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1708722
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6582930766
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2000669
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18473405
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1768038690
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 126,
            "match": {
              "location": "features/step_definitions/tor.rb:1267"
            },
            "result": {
              "status": "passed",
              "duration": 7044420
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 127,
            "match": {
              "location": "features/step_definitions/tor.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 6279556513
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 128,
            "match": {
              "location": "features/step_definitions/tor.rb:1271"
            },
            "result": {
              "status": "passed",
              "duration": 1209677635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 810463299
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 76054352
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2262781
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6543186356
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 353580710
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 1175443951
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 1926825285
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 158113738
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1478 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6614504477
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1030943568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20910
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1668486
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6432218956
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 360527579
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1492 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1776370541
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1395141852
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1781735708
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 344395853
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1492 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4665523522
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1039209555
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19486
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8536
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2945529
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6496543153
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 369356797
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5081587458
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1778956967
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2180339529
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1847110820
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 716073746
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4606424130
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1540"
            },
            "result": {
              "status": "passed",
              "duration": 153496201
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 392390192
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1856605688
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 355842016
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4836006307
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 539748622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 315883
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8335
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1707560
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6563684664
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 322714262
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 28376130831
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1656764995
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1162737891
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1788055537
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 500190283
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4557191123
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1540"
            },
            "result": {
              "status": "passed",
              "duration": 3870545372
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 270139918
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1696039490
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 447350191
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4498071338
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1076281802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 334467
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17754
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2057365
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6558300934
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 514415263
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11707682804
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 1915425521
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 1451213301
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4984832
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20513318038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3407710695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21500
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14786
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2103512
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 214389480568
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 309033374
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 10120769548
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4927914
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1533 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20962861143
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3403822482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9119780
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1129836
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6916338530
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 15446226
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2957880738
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2256649856
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8258565474
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 32169826
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 731750117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 784602
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8155
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1621960
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6724110971
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 23129003
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8370107801
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 11099580
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2197859388
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:171"
            },
            "result": {
              "status": "passed",
              "duration": 46970783
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 129115027
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 21307920
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 662730640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 264495
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1651043
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6495753840
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9707653
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2970134596
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2298586773
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 96396493135
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 12451353186
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2363878434
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 44890284
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783648153
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 108852709
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13375
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2199031
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6593552813
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10022693
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2217534409
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 95590974376
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 11734511557
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2413943987
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 67811770
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 683878316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 110220203
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1785054
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7929927463
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 67007893
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8695165
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2869157466
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2245487873
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 114722935753
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 15511944077
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2920807379
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:592"
            },
            "result": {
              "status": "passed",
              "duration": 59826957
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2734255228
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 781028227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 119478397
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12915
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1808038
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7392907018
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8773001
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2213140265
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 112383803450
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 15639596044
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2496819825
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 67871844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 624045906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 109017222
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13415
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1910470
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7354972789
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7425464909
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 779158203
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2262087129
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 100176857510
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 11548290993
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2470870224
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 54903160
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 888773182
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 114425578
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1966094
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8156998373
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 254446013
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 19793344
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 59963775042
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 261670453
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2291415446
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 48772032
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 731758342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 4951309
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13596
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1153052
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6808332054
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 20428133120
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10925084
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2203498468
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1533"
            },
            "result": {
              "status": "passed",
              "duration": 20552887779
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1190536658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 124818827
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 23103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4863614
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 57136697
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 65416359904
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 248254984
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1434"
            },
            "result": {
              "status": "passed",
              "duration": 141443442
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1442"
            },
            "result": {
              "status": "passed",
              "duration": 139619123
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1451"
            },
            "result": {
              "status": "passed",
              "duration": 102022686
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1479"
            },
            "result": {
              "status": "passed",
              "duration": 54990024
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1496"
            },
            "result": {
              "status": "passed",
              "duration": 75382511
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1513"
            },
            "result": {
              "status": "passed",
              "duration": 78807659
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 885570167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 4966938
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1878881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1233852
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:261"
            },
            "result": {
              "status": "passed",
              "duration": 45250617870
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5668999665
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6250256965
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 2458783730
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 15250163453
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 2011784017
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 7937051960
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 34523934813
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 14650675626
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9030366249
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10151650925
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1608093171
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 647704075
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been started",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 113703166
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5563629923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 640565658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9694057
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19516
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1882187
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1769977
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 46913659
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 69033629150
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 4512628214
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6232338887
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 2136685220
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 54809496
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5925301742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 875192815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11589218
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 21580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2720378
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2108462
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 95807779
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 114170528727
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 3221388850
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 3659808126
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 548997667
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 12119526263
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:146"
            },
            "result": {
              "status": "passed",
              "duration": 21487500169
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:168"
            },
            "result": {
              "status": "passed",
              "duration": 9098365646
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2439159517
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 560934121
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 3154468399
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2410151204
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 609158349
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9239226458
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3043831518
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 755677976
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 3163696207
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1454089325
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 447205696
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 339322619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 765801329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6382394
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1912234
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1722409
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 47166198
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 73301709094
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15685553
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 8884704133
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 3728975739
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 711492516
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 7929980909
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 35353451507
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6713163108
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13811910
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1640"
            },
            "result": {
              "status": "passed",
              "duration": 80315080
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8896630232
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been started",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 10191240135
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 33794237
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 45544142
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14387339
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12655762403
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1091647455
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 466601999
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 2533125862
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 22151759143
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 35672558284
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 5566901652
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 12364155
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9555543781
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been started",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 10227607071
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 42569283
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21309122
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 15880286282
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 52230853
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 65082071
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 690037041
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 660583363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 14779762
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15409
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1768996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1827466
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 48105130
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 36213444730
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6446894628
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 55167636
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9498059808
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 1687607917
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:160"
            },
            "result": {
              "status": "passed",
              "duration": 6015066066
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 62121620
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 77125703
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 642900289
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6288978
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1666284
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51366360
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8032937
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1014542850
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13163834258
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 61347059434
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2728689470
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 201624465
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 35771718
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 63087328
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 188071081
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 143980088
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3898365025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6074977
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1676152
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 47840019
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 51754765168
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 237225780
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 23033955200
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 708062398
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 536101098
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 8144864310
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 385485162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7825598
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2162813
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 60595655
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 57848808514
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 249604895
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1136914562
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1056"
            },
            "result": {
              "status": "passed",
              "duration": 1277541218
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:973"
            },
            "result": {
              "status": "passed",
              "duration": 215536981
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:990"
            },
            "result": {
              "status": "passed",
              "duration": 430756857
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 1909752923
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 149482996
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 4044099628
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots?",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1135"
            },
            "result": {
              "status": "passed",
              "duration": 11668575622
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 368613302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6481429
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14627
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2092322
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8654822165
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 12221607603
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 740777463
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2228735749
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 91332468269
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 15117890907
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 128303614
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 148848311
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 2181424519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19125
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2875580
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 46895956
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 60143541770
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 976166644
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 236142110
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2379669956
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 974872947
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 1748529587
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 765038546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6532113
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15458
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1796217
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7866521487
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 76300285
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 233464139
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 43614304
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 221421419
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 328989739
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18068665
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 22087497869
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 351154470
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 5627994080
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 19818662613
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 72655676041
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 5546565
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1135972897
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 209774697
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 51985152
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1555"
            },
            "result": {
              "status": "passed",
              "duration": 139587139
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 217526515
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17062569
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 21069865756
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 406749321
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 4156016076
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 18411865943
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 71510253719
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 8661173
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1252139852
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 352425534
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 50317285
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1555"
            },
            "result": {
              "status": "passed",
              "duration": 131179068
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 222688297
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26596107
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 21178008400
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1394"
            },
            "result": {
              "status": "passed",
              "duration": 122596132
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4327899783
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 393964454
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 792467323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11979472
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2391311
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7443241740
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 269835759
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 36658145
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1407"
            },
            "result": {
              "status": "passed",
              "duration": 44789136
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1418"
            },
            "result": {
              "status": "passed",
              "duration": 22142
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18162721
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 16561489138
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 381258239
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 971387787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21981
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 21029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2986127
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 35696636873
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 160718199
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 9320510807
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 628475265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18194
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4142034
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6837986532
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 350325562
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11887341351
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2144040331
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 219059251
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 9614135603
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 507099568
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3471748371
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20438
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 23324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3236535
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7189759228
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 364631164
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5102302234
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2092455647
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 52066763
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2065774110
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 230411698
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 10076816527
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1476 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 562975671
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3841533046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 373690
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14387
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2961800
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6790460714
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 434635154
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 28797801155
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 823914059
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 58279276
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1827439185
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 202803154
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 8951177323
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1476 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 490748291
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3741042796
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 493114
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14076
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3772632
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8176196968
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 357168635
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11174218775
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2033311906
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 355000011
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 5663659560
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1542 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 492229985
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 91013798837
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 566197982
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18164
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12974
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4102408
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 122376998
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 33015187091
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.boum.org,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 39731415
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 33407963
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 32328820
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 100381173
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 9113611
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 797038690
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6420453
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1770728
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7965672469
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9380508073
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 737499121
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7806335160
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1703"
            },
            "result": {
              "status": "passed",
              "duration": 7494577
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2010123847
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 157261597
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2291330832
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1686"
            },
            "result": {
              "status": "passed",
              "duration": 79449233
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3150082726
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 130211470
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3097408480
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2010198727
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 9244650767
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 181629467
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2682245821
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2644066151
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 925103577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 117025237
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 109355
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26259625
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 91531727
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41137
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 50104
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32804742
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3063370
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 960881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6121
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8947
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 66164
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22137039
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 60498926
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41037
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 62177
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 36729
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31311884
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 165190
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 62446
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65743
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 108774
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 942567
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6122
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10409
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 79159
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22445877
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9145901
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 83634526
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45396
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 72015
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 966213753
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6377142
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22132
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4958875
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12724
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51231277
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 188374
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1468502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6192
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71474
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22588385
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9128719
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 85587186
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 36809
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 81853
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 972083713
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52776373
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 190798
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52325778
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134862
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52286975
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 126777
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1187485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5791
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 73797
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29809028
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 22747554
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 2216474
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2067335
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 63600
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51605198
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 227417
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1310557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6352
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72015
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29705684
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 22938281
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 2533117
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2122148
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 53651
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29721783
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 32611
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1123336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5541
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10379
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 76573
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21547013
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8968780
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 22871024
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 77837
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2660347
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 974592766
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6160415
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 27040
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4817379
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13274
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52376203
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 188323
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1258099
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6032
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 77556
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22024958
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9595684
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 23038529
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 306754
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2726891
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 961796814
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53937368
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 166151
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52537736
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 154951
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53183646
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 148889
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1265943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6522
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 64361
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29456035
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 60723256
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38322
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5294774
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 33583
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31823644
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 176781
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1077650
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5310
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11021
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30754520
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 62830547
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 33762
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 6752234
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 55544
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 34996
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34618292
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 147908
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63229
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 54382
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 69410
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1105883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5270
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 69341
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 34795874
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 62361707
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 40547
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5144482
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 61234
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 962811446
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6223123
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 26730
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4739572
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15589
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50678581
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 141986
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1245394
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6201
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 66995
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29778811
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 61083151
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41859
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5270739
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 137267
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 961022144
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52645718
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 157415
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52765632
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 141615
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52370741
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 160470
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1464836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7273
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 74891
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24083025
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 81931985
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45014
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 110226
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46365106
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 534412
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 148579
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 154259
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 109525
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 2337070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13305
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16200
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 133931
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25852283
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 61085715
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39284
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 83025
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 65683
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31610394
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 165089
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 77496
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63328
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 70112
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1090553
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5951
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 76824
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23742658
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14738001
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 84065175
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38462
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 99966
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 975112201
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7239980
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33924
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5157417
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20739
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58369836
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 4583771
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 4091318
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19436
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16691
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 120366
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29168187
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14462154
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 85896507
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 36658
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 90760
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 965619930
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31020449
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 137748
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29199806
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 110137
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29169479
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 115546
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1196321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6031
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14016
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72225
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23665294
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 83482512
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17690686
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 42640
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2089615
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53036791
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 183915
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1089894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6723
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70703
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24055273
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 82830991
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16727329
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 68869
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2077314
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75279638
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 40226
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1082238
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5841
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72988
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24524564
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 61129869
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15992052
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 78468
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2018263
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 962853485
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6461681
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33764
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4723412
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 18105
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53335912
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 172012
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1316167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7223
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 68198
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24231174
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 61015014
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17611196
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 84469
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2074628
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 960385731
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54574872
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 183383
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54040591
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 184465
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53745148
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 178463
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1419630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8026
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11702
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72766
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25187475
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14686957
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 61594750
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3261702
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 132940
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2175748
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53143191
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 203021
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1095122
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5891
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12393
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 99316
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25422126
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 34190069
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 60461977
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3177234
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 165378
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2151593
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30368917
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37551
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1113347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5811
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 82964
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24624401
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14985516
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 108882747
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41387
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5600014
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 62428
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 963242175
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6114931
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 26590
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4854368
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14957
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28196186
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 167726
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1521512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6671
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 103283
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 79150053
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15648367
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 84892403
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41888
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5805010
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 62377
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 963192310
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29527681
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 140875
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30064135
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 114144
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28623725
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 111017
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1307480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6131
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 81904
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24968395
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 46928
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33107400
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 189085
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1003380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6503
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 69370
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24688239
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 65703
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 35046
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31733203
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 173204
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 95750
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 61375
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 940833
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6062
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 76753
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24052929
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 103474
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 977152414
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7849541
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 166473
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6401809
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 69109
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6458114
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 66174
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1090453
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6192
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70031
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23451984
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 70192
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 971351482
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7988211
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 44463
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6324493
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20799
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17755978
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 257033
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 3480493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13635
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 90490
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27893557
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 44152
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57583882
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 267481
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1466648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10689
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 80522
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27459655
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 68919
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30619626
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 193993
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 97303
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1305446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7674
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11432
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 81322
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 25184110
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 67306
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 187020
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31545492
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 189796
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 94186
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71784
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1200801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9167
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71794
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 25027887
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 57628
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30876128
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 183725
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1292222
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6111
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 82125
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24391545
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 222577
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 962622120
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7812012
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 139251
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6389135
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 101149
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6699375
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 86072
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1355000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7014
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72256
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23500174
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 83055
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 963855502
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7880879
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 32390
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6625297
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15609
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6589179
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 129162
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1187345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6503
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10880
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 89087
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23768767
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 99277
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 77265
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30662718
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 151404
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71024
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 54252
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 934401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5740
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10800
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 66474
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24716834
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 43702
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30664972
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 181310
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 949860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5330
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11613
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70832
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24696815
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 61244
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30138846
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 154720
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 58931
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 922990
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5491
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 69911
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21937886
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 43241
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2818142
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 17393
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 833872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5661
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 61206
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 20559923
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 37020
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2724396
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 18755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 818284
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5610
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11562
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71454
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 20995550
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 32601
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3421843
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 17442
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1930669
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6311
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10239
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1663208
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7453842460
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4172741
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19182620
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 9925558186
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7450332983
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 42368828
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 118948801
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 712330999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56001797
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13195
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2906207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6671992616
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4311469
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 29873208
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 10346461695
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7305534303
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 39897114
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:932"
            },
            "result": {
              "status": "passed",
              "duration": 146758142
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 386414292
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 125534735
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 724500265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 43200957
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2895527
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6651353609
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9186271348
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 11148152662
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 700281033
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 749471274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23775
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3100191
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10247223535
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9257649841
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 10792596099
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 631656407
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 923479174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22352
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14527
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2888693
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1638171
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6871456835
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 10050811359
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 879909729
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 310801468
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 77604895
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1094932519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47680
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince\n  And AppArmor should prevent Evince from doing dangerous things",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3422514
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6563317806
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 9,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4289390566
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1028076169
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4312538929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1016324213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20188
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 22790614
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6794966380
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 58420621
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 16,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4347083589
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1011334933
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4101337508
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 922841390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44434
            }
          }
        ]
      },
      {
        "id": "using-evince;i-cannot-view-a-pdf-file-stored-in-non-persistent-/home/amnesia/.gnupg",
        "keyword": "Scenario",
        "name": "I cannot view a PDF file stored in non-persistent /home/amnesia/.gnupg",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 50655
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 21049651
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6535313672
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 119293528
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/default-testpage.pdf\" exists",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 41604414
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" exists after at most 10 seconds",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 56632719
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" exists after at most 10 seconds",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 46612981
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 75951136
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 28,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4177076114
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 804966000
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 57893723
            }
          },
          {
            "keyword": "When ",
            "name": "I close Evince",
            "line": 31,
            "match": {
              "location": "features/step_definitions/evince.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 193981234
            }
          },
          {
            "keyword": "Given ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 98112451
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 33,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1980129153
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 162825964
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 48823484
            }
          },
          {
            "keyword": "When ",
            "name": "I close Evince",
            "line": 36,
            "match": {
              "location": "features/step_definitions/evince.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 171680801
            }
          },
          {
            "keyword": "Given ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 72052510
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 38,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1998916327
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 146848249
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 42,
            "comments": [
              {
                "value": "# Due to our AppArmor aliases, /live/overlay will be treated",
                "line": 40
              },
              {
                "value": "# as /usr/lib/live/mount/overlay.",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 72009258
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 844808010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20969
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3078179
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7431239842
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 73092018
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 96297199
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 48,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4227779261
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1086233272
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4133756641
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 697590839
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21852
            }
          }
        ]
      },
      {
        "id": "using-evince;i-cannot-view-a-pdf-file-stored-in-persistent-/home/amnesia/.gnupg",
        "keyword": "Scenario",
        "name": "I cannot view a PDF file stored in persistent /home/amnesia/.gnupg",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11702
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2979083
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7239194049
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 135701088
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/default-testpage.pdf\" exists",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 96676168
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 102750102
            }
          },
          {
            "keyword": "And ",
            "name": "I try to open \"/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 58,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4318029028
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 452457595
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 52437397
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 818443698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21609
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2842358
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6728227306
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000245981
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 50029765
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1241"
            },
            "result": {
              "status": "passed",
              "duration": 120774543
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 858315334
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1241"
            },
            "result": {
              "status": "passed",
              "duration": 120727413
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 48837480
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 840542504
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19917
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3089812
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6596609896
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 247724961
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 336310776
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 988402771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24405
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11111
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3344157
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7356946519
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18312140
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 16359705024
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7882254615
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9605296462
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1673473151
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7478157923
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 343508975
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7808277772
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1223"
            },
            "result": {
              "status": "passed",
              "duration": 2509361721
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7483190530
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 13790210569
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9785795109
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1754001091
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10133225709
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1997817516
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7658305077
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 2054094157
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8343133923
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Start Thunderbird\" in the \"Thunderbird Migration\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1889"
            },
            "result": {
              "status": "passed",
              "duration": 3701708741
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Thunderbird\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 3030064764
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8350262670
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 4689858614
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9898252788
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1712109828
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8660016528
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 3902767065
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7881558684
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 2742165810
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1252112213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23032
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15830
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3154301
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 61787821
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 34464
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 733138296
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25038434631
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1385964263
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1003036222
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6829509
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 21761
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2226965
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53415040
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 35125
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 812141031
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 23884542877
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1314901048
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 662983785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6707641
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1905411
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 55481011
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 32972
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 728266286
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 24015201423
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1157025351
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 753992931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6818910
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19036
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1856851
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52178803
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7555819388
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1379534231
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 730867240
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 15755938886
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1270276695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22832
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3858141
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 58868522
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7371736644
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 363881912
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1395503907
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 15493311689
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1724627848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19958
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3040267
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75978317
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7319376147
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 343095207
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1386692352
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 15953104153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1319583430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22531
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3313289
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8571228673
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 282762222
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 258156480
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 789994144
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38356227101
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10029791673
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7255499425
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 142655777
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4710297
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 589895423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13500690
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 52598
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 8482026
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7771747870
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 229893586
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 260795637
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 747998870
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35902633095
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10054211608
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7106690487
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 116194347
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4796670
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 466920736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11334993
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 50484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 8538342
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 81854150
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 32421
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8046901
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018731110
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13245050061
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 56478143533
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 515731464
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 43542672
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9365654253
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7267721074
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 118887656
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1185924135
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1201129822
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 15923132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 957841948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 125677441
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 26559
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1953601
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 56213348
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 32091
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8495371
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1020640519
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13288656860
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 47678872168
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 248332258
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 75691343
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 47069392
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 186772490
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5365867
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 595383123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 130796404
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2365292
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 94447003
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 31699
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8638619
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017003210
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13446618469
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 41845128545
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 271326702
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 44971040
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 38461500
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 185026548
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5205836
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 750166507
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 124081130
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1821053
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53801700
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 29346
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 7905044
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017170218
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13398715178
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 57584595912
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 581590603
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 55846242
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 33891947
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 192241702
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4961768
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 768318670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 134309981
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 21400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2632834
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 68095599
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 36279
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 750179767
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25995248707
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 11665100387
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1015923142
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6635566
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 58921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2207306
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7872729718
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1676885879
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 607913799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20859
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2998470
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6882596794
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 1116286284
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 740259528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20799
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3529205
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8018307699
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25433836533
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 51590707
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14512760400
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1072086802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20528
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2877613
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6700832506
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25125763397
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 55060159
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14366617590
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1223934577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22061
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2893311
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6733484652
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25239242194
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 39310672
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14232886258
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1204683162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19327
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11422
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2927126
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6558308957
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25144422766
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 40507306
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14350764522
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 841067944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20538
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2857996
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6845783975
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25809352268
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 33732078
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14234594361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1089178465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19146
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2898802
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6569826857
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25825463266
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 90323428
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 93863833
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20779203
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 41598402061
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5035535677
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5219063613
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 57773815
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11027355429
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4926919321
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5226942342
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 44,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4032120704
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 375351217
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 674473851
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21340
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2888835
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6847204806
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25487929296
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 111168265
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 103448335
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21624577
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12190259506
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4738801983
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5226389667
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 60799717
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7608514233
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5057012034
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5205730363
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 45,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4379753082
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 352257226
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1185126002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21581
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3336333
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6805563055
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11050419085
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 113543045
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 91626020
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25372070
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12274119476
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4744242661
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5194214497
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 63435836
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7849595066
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4146570886
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5200602644
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4172527103
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 343253474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 722373444
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22151
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 28964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2840253
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6867775790
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 26127876544
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 111155251
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 108540919
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19999502
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11545035791
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4762821910
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5162614777
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 61967876
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7777175628
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5452525089
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5213856462
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4213691901
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 352983729
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1266262848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23895
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4154125
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7032506884
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25886970583
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 93364287
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 110874224
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19391482
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12765922602
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4771427027
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5213252569
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 54750671
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7599631360
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5218604340
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5222600921
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4580296314
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 347298405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1063387714
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23223
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3199036
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6676387393
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 26122043431
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 95852270
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 95382890
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14648844
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 41816852652
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4326854585
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5196193769
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 58768381
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 10758362337
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4781492873
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5215927052
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4510626072
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 358528202
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1184253807
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20949
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13405
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 11837544
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6763815833
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 26558056904
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 103660593
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 77839103
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16019643
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11271293079
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4693195896
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5203664839
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 88367333
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7517695717
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4837541420
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5214768105
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4332373708
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 341561573
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1310103870
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21370
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2908352
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6718916653
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25415298278
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 107210207
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 130714788
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15200348
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11811622051
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5166468831
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5199937568
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 65332081
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8126370768
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4693661039
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5213961526
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4741762245
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 398052125
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1254556475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20679
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2918460
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6658570826
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25713035718
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 91193419
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 162024226
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22739055
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11599279416
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5143443494
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5218607994
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 55638495
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7835585743
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5079724665
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5223557888
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4318543616
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 373537111
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1220704535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21801
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2934749
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6666869872
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25093553112
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 102931528
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 90255812
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16001089
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12360761443
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4761225958
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5215755499
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 110836853
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7606487085
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4747169254
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5209139362
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4521596891
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 385106795
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1088105216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20919
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2849952
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6663187437
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 26703578347
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 97964319
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 89653893
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19934580
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11520321678
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4796922713
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5176714867
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 54255412
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7683548114
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5209569874
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5208477107
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4697033076
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 348348185
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1360290429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21120
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3121890
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6744152163
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25623383491
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 78053474
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 74961739
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21000498
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11509345555
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4759482396
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5193038123
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 62101597
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7820633236
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4941464900
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5195063388
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4169299579
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 416468432
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 701185603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22031
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2849681
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6722644697
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 25518459933
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 102834647
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 92096413
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17628439
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 41867070591
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4418244260
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5176090003
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 54096233
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 10348094780
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4698003900
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5298693072
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4646457154
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 350948107
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1256339573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21310
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3628351
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 59,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8336446370
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4664808469
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1831"
            },
            "result": {
              "status": "passed",
              "duration": 2099996979
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 6674993035
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 37193895474
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 286059818
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1206896750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6425654
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1858603
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7342672557
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4559307215
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:497"
            },
            "result": {
              "status": "passed",
              "duration": 2358403712
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 86475608
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4490642679
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 75899086
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 5311544918
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 39005655758
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 338726472
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 909584314
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8902149876
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1877"
            },
            "result": {
              "status": "passed",
              "duration": 41506199
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 870398923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6531471
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1801116
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8318546769
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 83,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 82
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 313797822
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 28688005121
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 85,
            "match": {
              "location": "features/step_definitions/usb.rb:1584"
            },
            "result": {
              "status": "passed",
              "duration": 642189765
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9296386300
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 88,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 87
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 36344174208
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 278467521
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 229883541
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7105654507
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 431979466
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 196670749
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4458497771
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1831"
            },
            "result": {
              "status": "passed",
              "duration": 2108521914
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:497"
            },
            "result": {
              "status": "passed",
              "duration": 2362305596
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 90242964
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 2696669565
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 100,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 99
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 37575458603
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 677275877
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 203158547
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 8831053365
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 105,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 104
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 210902811
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 723029634
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 975788990
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10519265
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1790907
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7219300960
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3950042
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 7911986241
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10700566631
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14392173
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 8885354771
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 68138257
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 71040406
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 1272401202
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 48638594
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 55791318
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 100054151
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1052897551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47068971
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3989566
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6758126540
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5280506
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10280556269
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14423201
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11507662472
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 72471408
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 52648027
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 1277313721
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 51060262
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 46030957
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 120139393
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 734116686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59658457
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4371422
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6679301470
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3657664
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16638442
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 91200108
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11634179980
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50470246
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 5570920
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 1622287608
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 633156078
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 41786262
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3964110
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6621351387
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3635564
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23027076
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 120479771
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10900218080
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 65049730
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 5965509
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 1612597361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 928527594
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32601629
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14367
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3236396
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6681592394
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4623945
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15590609
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 88863140
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 127580800
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 12161647505
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 67429690
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 305862960
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 5836369
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 1595397258
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 642150686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61426811
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3051749
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 56872725
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1769486
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 716312283
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33051204891
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 73562243
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 8692660
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 797549622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37964089
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19807
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1968930
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 48722380
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 48940285647
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 8008516453
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 1123233572
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 585218604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7008115
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/needed_package_updates.feature",
    "id": "packages-are-up-to-date",
    "keyword": "Feature",
    "name": "Packages are up-to-date",
    "description": "  On Tails branches that use frozen APT sources,\n  packages we install from frozen distributions (e.g. the Linux kernel\n  installed from testing/sid),\n  and packages forked from Debian that we install from our custom APT repository,\n  can become outdated.\n  As a Tails developer, I want to ensure we don't miss important updates.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "packages-are-up-to-date;all-packages-are-up-to-date",
        "keyword": "Scenario",
        "name": "All packages are up-to-date",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 78207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 11,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 260718
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "failed",
              "error_message": "Command failed (pid 93168 exit 1): [\"/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/bin/needed-package-updates\", \"--config=/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/config/ci/needed-package-updates.yml\", \"--file=/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/tmp/tails-amd64-21472-circumvention-settings-2@d2cdf3b2d2+stable@39e5466df9-20260331T2223Z.build-manifest\", {:err=>[:child, :out]}]:\nINFO: Check local file /var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/tmp/tails-amd64-21472-circumvention-settings-2@d2cdf3b2d2+stable@39e5466df9-20260331T2223Z.build-manifest\nINFO: Last successful auto-update of the UDD mirror: 2026-04-01 00:05:02+00:00 (0:54:22.778353 ago)\nINFO: Need to upgrade to a new APT snapshot:\n  - firmware-nonfree (20260221-1) to Debian forky (20260309-1)\n (CommandFailed)\n/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/features/support/helpers/misc_helpers.rb:332:in `block in cmd_helper'\n/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/features/support/helpers/misc_helpers.rb:319:in `popen'\n/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/features/support/helpers/misc_helpers.rb:319:in `cmd_helper'\n/var/lib/jenkins/workspace/test_Tails_ISO_21472-circumvention-settings-2/features/step_definitions/needed_package_updates.rb:10:in `/^all packages listed in the build manifest are up-to-date$/'\nfeatures/needed_package_updates.feature:12:in `Then all packages listed in the build manifest are up-to-date'",
              "duration": 3285104526
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 117470
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6482
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14246
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2926495
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8007510126
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 56 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 56000163201
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 313505073
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18392499
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 9880922701
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 358882496
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7472612837
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:738"
            },
            "result": {
              "status": "passed",
              "duration": 39243808
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 682436724
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19737
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3556134
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6911446374
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:564"
            },
            "result": {
              "status": "passed",
              "duration": 8036756032
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10789088714
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 60190052
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 61062068
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000151599
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 67639816
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 988595583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34104
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3362432
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10961788898
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8879939613
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 675894996
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 190355419
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1352764519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17481
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2951682
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 76432418410
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5664944106
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6233231257
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1680"
            },
            "result": {
              "status": "passed",
              "duration": 833640202
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 567863625
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22661
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2969525
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8683551237
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 13524348160
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 273221891
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 114002555
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 4716157934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 950055771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20507
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2991868
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8259631578
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 316430650
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 136148269
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 16509786941
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 391333968
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9391024004
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 59208879084
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 180610466
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 55337190
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 902322334
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6335253
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15609
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1735983
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7357396681
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:367"
            },
            "result": {
              "status": "passed",
              "duration": 3932347171
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 206310393
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:345"
            },
            "result": {
              "status": "passed",
              "duration": 4417569179
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:438"
            },
            "result": {
              "status": "passed",
              "duration": 89687906
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:414"
            },
            "result": {
              "status": "passed",
              "duration": 2352291320
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:407"
            },
            "result": {
              "status": "passed",
              "duration": 885557727
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 8729253528
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 49733998
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 791218563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22733
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3266833
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8102674120
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 324768918
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1278720033
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 2123886351
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2580130600
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1179250705
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 10676990921
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 61924263475
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1198946039
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 813528838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7206946
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 197980
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 11297133
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7624004762
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 100989697
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 57753258
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 71364826
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2464692730
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 49537549
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1717"
            },
            "result": {
              "status": "passed",
              "duration": 43140630
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2421090414
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 58488385
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 56199865
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 784133036
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20058
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10460
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3123083
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7337286267
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 84678899
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 90579929
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2572667550
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1721"
            },
            "result": {
              "status": "passed",
              "duration": 2828165355
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 35719984
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 841678374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21661
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11011
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2995563
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7289153291
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17071265
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 16006260148
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 207500082
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1056"
            },
            "result": {
              "status": "passed",
              "duration": 1062794274
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 25243209415
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved?",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1135"
            },
            "result": {
              "status": "passed",
              "duration": 11850491431
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 143387547
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20398
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17663
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4075597
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7300030556
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21622543
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 16223686554
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:932"
            },
            "result": {
              "status": "passed",
              "duration": 97074461
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 19902737762
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 70905073844
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4802891
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16574723
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 41553755593
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 408323593
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 54492837
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 118789016
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 624907840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38311110
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2375292
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8493723145
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:322"
            },
            "result": {
              "status": "passed",
              "duration": 1087265710
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11500995815
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 15096162338
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 962671244
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22863
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2996225
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8717616105
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 13810809550
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1668"
            },
            "result": {
              "status": "passed",
              "duration": 13377021005
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 38636206876
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 397344376
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 287035493
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:464"
            },
            "result": {
              "status": "passed",
              "duration": 4505225723
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 23861277331
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1632"
            },
            "result": {
              "status": "passed",
              "duration": 175486195
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6074287524
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35846219348
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 281821772
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 232308617
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6912707827
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1668"
            },
            "result": {
              "status": "passed",
              "duration": 69099381
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 214828618
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8519258442
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1632"
            },
            "result": {
              "status": "passed",
              "duration": 130489355
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783330587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7882183
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2759853
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8071929471
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 27612586146
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9553421378
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 60846832030
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 21134127764
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 936556535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6559894
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1765279
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7826331651
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 14713116869
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 91913067
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 4206993741
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8394344639
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1175"
            },
            "result": {
              "status": "passed",
              "duration": 2646335583
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 367952453
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 968162168
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20598
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11522
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2964044
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7792794757
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1066"
            },
            "result": {
              "status": "passed",
              "duration": 62220839
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9449955729
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 61628139034
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1121"
            },
            "result": {
              "status": "passed",
              "duration": 259218921
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 509106886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6683046
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17292
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2482212
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8097819294
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 45354451
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1194942676
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 153,
            "match": {
              "location": "features/step_definitions/usb.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 10052930991
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 154,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10040794848
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8231149374
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 156,
            "match": {
              "location": "features/step_definitions/usb.rb:1777"
            },
            "result": {
              "status": "passed",
              "duration": 1325697549
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1003228888
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1044678531
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 746680580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24406
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 160,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4130842
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 161,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 30987018320
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 19122695883
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 163,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9646647695
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 636915609
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:831"
            },
            "result": {
              "status": "passed",
              "duration": 1576920554
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 872772025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21519
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4596494
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7203360478
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:706"
            },
            "result": {
              "status": "passed",
              "duration": 14989641543
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 170,
            "match": {
              "location": "features/step_definitions/usb.rb:623"
            },
            "result": {
              "status": "passed",
              "duration": 579510402
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1001245062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22233
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 172,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13565
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3161755
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 173,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8252958884
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1804"
            },
            "result": {
              "status": "passed",
              "duration": 7457193278
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6707350839
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1846"
            },
            "result": {
              "status": "passed",
              "duration": 50959305
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 1677166189
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 621891070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23323
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3233329
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8000104058
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1804"
            },
            "result": {
              "status": "passed",
              "duration": 7809351131
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1306310576
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:1762"
            },
            "result": {
              "status": "passed",
              "duration": 3089888168
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 1210182800
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1858"
            },
            "result": {
              "status": "passed",
              "duration": 297669242
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1846"
            },
            "result": {
              "status": "passed",
              "duration": 55414505
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1864"
            },
            "result": {
              "status": "passed",
              "duration": 1249664573
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 982385405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 778618688
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23084
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 191,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 190
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14257
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4065800
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 192,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7303603030
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1837"
            },
            "result": {
              "status": "passed",
              "duration": 64456520
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1159780529
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:1762"
            },
            "result": {
              "status": "passed",
              "duration": 9803554225
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 1173568068
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 197,
            "match": {
              "location": "features/step_definitions/usb.rb:1769"
            },
            "result": {
              "status": "passed",
              "duration": 26112138
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10276794922
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8758124775
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 205,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 200
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 201
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 202
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 203
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 204
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1820"
            },
            "result": {
              "status": "passed",
              "duration": 144088422
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 115040902
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1294543925
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1247676118
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 209,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 959017541
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 960386768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22373
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 212,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 211
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3615075
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 213,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7521729912
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 214,
            "match": {
              "location": "features/step_definitions/usb.rb:1804"
            },
            "result": {
              "status": "passed",
              "duration": 7536363697
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 215,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1325851618
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1206759895
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 2598560132
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10418437633
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8063592087
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1382069309
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 221,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 894345126
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 846185077
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21270
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20638
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4275373
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8588147606
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 17338542178
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 682365977
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13462209
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4879415339
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11167597645
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1117920347
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 6931912
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 484881506
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 8797664962
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35407997747
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6692887789
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4753360
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9481823320
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 6697102
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16965865
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4459679337
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1522172132
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:862"
            },
            "result": {
              "status": "passed",
              "duration": 1702702620
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1238337226
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 5926614768
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 5806412
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 518432093
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 255556307
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 960185420
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55862113
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1999868
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7334580542
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 16402422345
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 642709968
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13291750
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2162802572
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10888487807
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 30393380737
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 7820647
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 506674939
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 8736534339
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35985842670
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6320084779
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5679043
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8748660696
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1182"
            },
            "result": {
              "status": "passed",
              "duration": 5320231
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18028548
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4612340107
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1310267974
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:862"
            },
            "result": {
              "status": "passed",
              "duration": 1791106815
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:740"
            },
            "result": {
              "status": "passed",
              "duration": 1253664772
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 6557472735
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1676097080
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 4945899
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 495879618
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1041"
            },
            "result": {
              "status": "passed",
              "duration": 498392305
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 954213601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52600016
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 80561
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 49163
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 68740191
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 126326
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5430
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 7173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4156569
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80246852
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12277626
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1048017625
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13333541048
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2506850944
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 56569321474
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 315193743
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2600264127
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8906165094
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1063964525
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2496957892
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 40627
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 3968023646
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2473463171
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 33783
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 497588589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 136014139
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-is-setup-correctly",
        "keyword": "Scenario",
        "name": "The live user is setup correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20859
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2640228
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8011659409
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 151932369
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 77233900
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 144736485
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 792776128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20789
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9979
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4196604
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11293383975
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 13,
            "output": [
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception",
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:170"
            },
            "result": {
              "status": "passed",
              "duration": 151601029
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 741955128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21620
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3391395
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10134093791
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 17,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5374646153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 736454205
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21220
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4653450
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6975624961
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 21,
            "match": {
              "location": "features/step_definitions/checks.rb:227"
            },
            "result": {
              "status": "passed",
              "duration": 105240834
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 636262172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21730
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 23,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12723
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4140981
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 24,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8383466984
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 25,
            "match": {
              "location": "features/step_definitions/checks.rb:227"
            },
            "result": {
              "status": "passed",
              "duration": 132571550
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 730985340
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22072
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17022
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4208628
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9069302935
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 12973357546
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1703"
            },
            "result": {
              "status": "passed",
              "duration": 5987029
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1707"
            },
            "result": {
              "status": "passed",
              "duration": 41487936
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9834307620
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9805313315
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2665878823
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1447686044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24876
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3707478
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7412816092
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 11536226
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7844146834
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 5890387188
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2935962429
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1065281714
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22773
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9317
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3255371
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11097363075
            }
          },
          {
            "keyword": "When ",
            "name": "I request a shutdown using the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:905"
            },
            "result": {
              "status": "passed",
              "duration": 3323604780
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 10892204782
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 467981522
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18505
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4273348
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10143163036
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:905"
            },
            "result": {
              "status": "passed",
              "duration": 3362076166
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 45041266961
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3747477748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23574
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3363343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1742064
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10010942785
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 53027734
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 320703945
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 7216007017
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 1263564663
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 8005652
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 244276981
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 651509391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 71533
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13756
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3365366
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2367978
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9960465709
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 164356803
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 189943172
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5635739241
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1572427707
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 208342733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1000932561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 662391
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9649
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3184648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4566117
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9873914735
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 48650571
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3327563967
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 1343499331
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 13,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2334962548
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1598936360
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1065170395
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10513013342
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:244"
            },
            "result": {
              "status": "passed",
              "duration": 496207211
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 298931397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 879522995
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 84789
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3406344
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1734640
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9860851096
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 41317119
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3286605052
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 1100286451
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 20,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 8742252676
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 231769306
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 240086884
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 17503687466
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5745289380
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1294112640
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5452970750
            }
          },
          {
            "keyword": "And ",
            "name": "the only connections have been made to my email server",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:252"
            },
            "result": {
              "status": "passed",
              "duration": 567033586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 495399053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 749115831
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 123041
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3264718
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8114465852
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8937242431
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1229"
            },
            "result": {
              "status": "passed",
              "duration": 1368511630
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1232"
            },
            "result": {
              "status": "passed",
              "duration": 618590737
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1236"
            },
            "result": {
              "status": "passed",
              "duration": 266892460
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1241"
            },
            "result": {
              "status": "passed",
              "duration": 1107788882
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 1965688118
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 972867247
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23143
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9488
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3063801
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6738003013
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25880460
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2349996602
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:517"
            },
            "result": {
              "status": "passed",
              "duration": 3678304226
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1304150180
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:881"
            },
            "result": {
              "status": "passed",
              "duration": 84510354
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1005884455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25949
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 16305748
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6881334427
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1260219587
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16464585
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1129413092
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1204686325
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1180537752
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "passed",
              "duration": 1102265398
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "failed",
              "error_message": "Expected TCAConnectionFailure to be raised but got TCAConnectionTimeout: Timed out while waiting for TCA to connect to Tor (RuntimeError)\n./features/step_definitions/tor.rb:429:in `rescue in block in <top (required)>'\n./features/step_definitions/tor.rb:424:in `/^the Tor Connection Assistant fails to connect to Tor$/'\nfeatures/tor_connection.feature:57:in `Then the Tor Connection Assistant fails to connect to Tor'",
              "duration": 120000939747
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:435"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:441"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1197"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:470"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1102"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:943"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'I can use a network with captive portal' (at time 02:48:08)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/02:48:08_I_can_use_a_network_with_captive_portal.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/02:48:08_I_can_use_a_network_with_captive_portal.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/02:48:08_I_can_use_a_network_with_captive_portal.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_21472-circumvention-settings-2/6/artifact/build-artifacts/02:48:08_I_can_use_a_network_with_captive_portal.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 5481400221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 756568
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3469634
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10246113202
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 58338087
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 162282585
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:133"
            },
            "result": {
              "status": "passed",
              "duration": 69643515
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 79375954
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 557434634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21730
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3592752
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9892589797
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4594049
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6691900350
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7260136916
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 356422201
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 467592839
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 579515739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31508768
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3683964
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10229288831
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5202019
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 206669829
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 285785385
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 37364663
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 961779730
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50288411
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3900579
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9927028368
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4181256
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 131398928
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 1738264941
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 45387648
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 988776003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52073859
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12543
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4161870
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9988477351
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4072473
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 133789608
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4069656437
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 67703791
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 940226510
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44790710
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-tcp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified TCP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5489268
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 10761999
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9867677092
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1255437013
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 42079
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 92792458
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 241245717
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 731047821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64461
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3444476
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2233585
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9983055583
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1243252451
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 44584
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 86050744
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 196977034
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 756002108
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67717
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 59
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10731
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3259219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2293789
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10068877192
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 62,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 5322146179
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 44132
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 76271858
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 186516132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 543408407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67797
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10720
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3869421
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6857539975
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 24042967
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23996631
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 9991507000
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 7692287
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 859780637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21591
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5313618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4296552
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9931356898
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 56331058
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:346"
            },
            "result": {
              "status": "passed",
              "duration": 105156710
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 10012834912
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 281132578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1347803854
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 83547
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3749988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4778916
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10055922703
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 49492331
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:353"
            },
            "result": {
              "status": "passed",
              "duration": 2282800654
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 5764303
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 228404203
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 595771002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 93375
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6018359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3131058
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9936966355
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 88082432
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 33236913434
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 6121161
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 270973051
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1023945771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 78958
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3605978
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 5086152
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10123454727
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 56177090
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8227936050
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 10200069637
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 370829610
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 31415163
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 631935329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1766426642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 198182
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13285
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 14609940
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9800989165
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 1026206581
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2040404
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 7418996825
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1337"
            },
            "result": {
              "status": "passed",
              "duration": 4185977891
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 142290542
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1341"
            },
            "result": {
              "status": "passed",
              "duration": 18487377
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 641091981
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49814596
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12614
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3756670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1927032
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9961049267
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 45026452
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15182376762
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 7264732174
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 4650124687
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:638"
            },
            "result": {
              "status": "passed",
              "duration": 3306753594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 246154691
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 657836043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73498
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3803578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1862500
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9983639333
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6767684476
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 11488639588
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 415555712
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 474732825
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1535406526
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 173926
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3316546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2281856
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9793065547
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6525026191
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:400"
            },
            "result": {
              "status": "passed",
              "duration": 36962375754
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5873692529
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1086681327
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 2276446
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4106826
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 5114415
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9863199642
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6549945728
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:419"
            },
            "result": {
              "status": "passed",
              "duration": 7285705706
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 273827263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 961366248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 88857
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4396511
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9792272111
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 42138731
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 46933277
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 49124162
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 35874972
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 35860957
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 39103042
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 34415197
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 73810757
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6853584290
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7335661968
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 348773229
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 51477303
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 3802394419
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 373250993
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4160273152
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 388275851
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4171811383
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 439571253
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 3940012728
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 363582243
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 853482269
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22351
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3560253
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9688466678
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6741374689
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 952405178
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 850893255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21399
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3776227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2105186
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9732267255
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 7036871460
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 6699776676
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:388"
            },
            "result": {
              "status": "passed",
              "duration": 93955201
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 57934093
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:664"
            },
            "result": {
              "status": "passed",
              "duration": 3153819676
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:521"
            },
            "result": {
              "status": "passed",
              "duration": 1399685901
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 64728176
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 210593931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1326210991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73186
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3952648
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9665452763
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6607918575
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 9986991463
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 385812936
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 1374828586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1366387098
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21671
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9668
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4400538
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9830064827
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6810231648
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 6935448989
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:394"
            },
            "result": {
              "status": "passed",
              "duration": 93161082
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 6591561537
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:388"
            },
            "result": {
              "status": "passed",
              "duration": 161961300
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 843414864
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21871
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10239
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3699544
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8500397435
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 40336865
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 16274888642
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 48997416
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7444624274
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14469735623
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6891289506
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 11690803688
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 453052723
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7209659318
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 434270583
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:638"
            },
            "result": {
              "status": "passed",
              "duration": 9066833227
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1099485576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21791
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3771799
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8285190127
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 54975789
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14783976256
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9834963328
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 7761989382
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1322475168
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20779
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3737264
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6915733586
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 79605557
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14843383127
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9831901445
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 6761988034
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 797989908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22481
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10730
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3802256
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6721603521
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 46866181
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14566804062
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9905331383
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 7502633900
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1098314746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21230
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3922511
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6765990372
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 54479568
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14706878442
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9916654727
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 7597735469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1844851059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19877
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 71965
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 25217620
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6607095126
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 59662543
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14684412144
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9669580487
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 7555380731
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 936923465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21320
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5536707
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7922408748
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1163090156
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:973"
            },
            "result": {
              "status": "passed",
              "duration": 155812378
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:990"
            },
            "result": {
              "status": "passed",
              "duration": 399951147
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 1807160195
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 12936829085
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:621"
            },
            "result": {
              "status": "passed",
              "duration": 8116938598
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10285016956
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35961648737
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7187599969
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9017277218
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8340869663
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8032081825
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:633"
            },
            "result": {
              "status": "passed",
              "duration": 866021883
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 584072181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7309189
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2219950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2060291
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10653017854
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5455382857
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 165744122
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 208820149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 682086258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 75462
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11011
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4319996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2059319
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9919975344
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 207031899
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@lizard.tails.boum.org:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 8842607661
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 179230205
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 207575128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 847452362
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 68538
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4061763
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2547705
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9934239039
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 222023023
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 46538
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 26600
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 194074346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 830222571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 65242
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3988524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2528128
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9785812857
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 142133352
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 42258
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 17272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 169773413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 679680110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64231
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/totem.feature",
    "id": "using-totem",
    "keyword": "Feature",
    "name": "Using Totem",
    "description": "  As a Tails user\n  I want to watch local and remote videos in Totem\n  And AppArmor should prevent Totem from doing dangerous things\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11762
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4093211
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 125598685
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6988759314
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 13,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7908541040
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 45259873
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 43224246
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 99801288
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/video.mp4\" with Totem",
            "line": 17,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4188377817
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1893509038
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"/usr/bin/totem\" from opening \"/home/amnesia/video.mp4\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 59659648
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 20,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 135134968
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 40142370
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 39249088
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 85861132
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 24,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2016567031
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 25,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 693426492
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.gnupg/video.mp4\"",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 63106278
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 27,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 208199227
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 44582824
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 92612325
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 30,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2018917247
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 31,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 682249074
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 46029965
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 33,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 149759936
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 44413695
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 78167254
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/live/overlay/rw/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 36,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2068342455
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 37,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 722069422
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\"",
            "line": 40,
            "comments": [
              {
                "value": "# Due to our AppArmor aliases, /live/overlay will be treated",
                "line": 38
              },
              {
                "value": "# as /usr/lib/live/mount/overlay.",
                "line": 39
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 46632444
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 41,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 128995912
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/home/amnesia/video.mp4\" to \"/home/amnesia/.purple/otr.private_key\" as user \"amnesia\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 53496658
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/.purple/otr.private_key\" exists",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 49277712
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 75701862
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.purple/otr.private_key\" with Totem",
            "line": 45,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 1981144066
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 46,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 694984051
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.purple/otr.private_key\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 48014934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1047132894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 493345
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4028791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2081190
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 162405896
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-webm-video-over-https",
        "keyword": "Scenario",
        "name": "Watching a WebM video over HTTPS",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 49
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9771912994
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video over HTTPs",
            "line": 52,
            "match": {
              "location": "features/step_definitions/totem.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 9201313633
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 333031275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 802789008
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 162303
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13585
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5098536
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 122501280
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-mp4-videos-stored-on-the-persistent-volume-should-work-as-expected-given-our-apparmor-confinement",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored on the persistent volume should work as expected given our AppArmor confinement",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7716283117
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 56,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7866650550
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 35650312
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" with Totem",
            "line": 58,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4050884484
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1885925558
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 60,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 130304284
            }
          },
          {
            "keyword": "And ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 75345706
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 48798262
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 63,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 1994030077
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 64,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 709720729
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.gnupg/video.mp4\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 52888298
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1037129136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 520655
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13024
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4350663
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8051644941
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 7912681912
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11839011118
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18492176
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8184419238
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 62002319
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 1149681804
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1413048389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23163
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 56175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 16398322
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10093214158
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 1024561425
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6119710481
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1337"
            },
            "result": {
              "status": "passed",
              "duration": 3733213510
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 186001177
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 595240804
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 632284
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4602185
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9932006722
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5921936313
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:324"
            },
            "result": {
              "status": "passed",
              "duration": 169022325
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 378046829
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 398132963
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4230761607
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 3975181925
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 802436740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1029412126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22272
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4004985
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9981740130
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5821120457
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7262320196
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 310763504
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 45250864
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 825298004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24005
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4111926
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9988243321
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6101771598
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 120719931
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:625"
            },
            "result": {
              "status": "passed",
              "duration": 915600881
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 70672418
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1068109580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22072
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9607
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3740169
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9680358103
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6316567168
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000155589
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 55926702
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1149743089
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1373596795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20299
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3727887
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9881195817
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 95124883
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5950541771
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 3632733415
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 144680457
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1023848399
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20909
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 9618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3666130
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2060751
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9776170863
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4919840
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 25320853
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 6059255
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5914762468
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 120000168346
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 477069098
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 264944514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 794806872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37755847
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3921329
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9784725020
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8794022
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000151250
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 84925206
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3460746049
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1098386477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19628
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6163471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7555810418
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10467830470
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1372571577
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 4731155545
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1863483371
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 354756608
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1269193144
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 86203290
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 566396938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 292759
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3589979
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6876688120
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 19635437570
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1343916716
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5499174226
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1794214392
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 85151730
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1266490275
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 91417592
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 650694475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 273554
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3821142
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6794806921
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7782110264
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 6026189941
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1723866694
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 258314938
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1257728229
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 91121687
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 837297441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 384441
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8747
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3765337
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6783905144
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 26241001725
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 8522528936
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1682010540
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 107119159
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1213067913
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 94531458
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 557653106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11566849
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13415
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4241148
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6853031068
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 19780158119
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1701257567
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 9693455645
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1720231297
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 123228771
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1229402562
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 93085006
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 578699808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 278172
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5218010
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6623714407
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 19564115251
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1498609007
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 7954899278
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1684096990
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 108778950
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1251163181
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 84168816
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 967473631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 279144
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11109
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3531769
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6629894741
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 26656835227
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 19447014519
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1673863002
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 275938401
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1213437713
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 101038192
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 732056900
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11489745
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4919621
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6556658968
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 26114102486
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 18021194723
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1727940846
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 90275320
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1211816190
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 115016499
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 901417054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9203349
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3588626
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6679453360
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7961016252
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 15268187268
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1683358199
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 139271885
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1226882704
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 103564355
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 656111913
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 407644
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3697501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1831152
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 59081999
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 23484
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 859017238
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32987699448
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 333156635
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 7242156785
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8056190541
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 11639213
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4703581782
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 29580881266
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 2080102800
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 44703080
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1279292263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1066230183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8227540
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2441084
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 54608113
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 26850
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 795849809
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32820002041
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 390031236
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8220939424
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7906759032
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 9660695
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4683172193
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4244110948
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 195480539
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 897757948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8169009
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4115543
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6977288804
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1786"
            },
            "result": {
              "status": "passed",
              "duration": 96015947
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 642750697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20298
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4957662
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6686960855
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1781"
            },
            "result": {
              "status": "passed",
              "duration": 588947131
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 959449037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22763
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4101677
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6827386291
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8557718421
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2434866638
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1467387123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20509
            }
          }
        ]
      }
    ]
  }
]