Skip to content

Commit

Permalink
WIP - test for unrecognized data
Browse files Browse the repository at this point in the history
  • Loading branch information
mvollmer committed Oct 27, 2023
1 parent 6618548 commit 004d989
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 30 deletions.
58 changes: 28 additions & 30 deletions pkg/storaged/pages/legacy-vdo.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import React from "react";
import client from "../client";

import { Alert } from "@patternfly/react-core/dist/esm/components/Alert/index.js";
import { Card, CardBody, CardHeader, CardTitle } from '@patternfly/react-core/dist/esm/components/Card/index.js';
import { Card, CardBody } from '@patternfly/react-core/dist/esm/components/Card/index.js';
import { DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm } from "@patternfly/react-core/dist/esm/components/DescriptionList/index.js";
import { Stack, StackItem } from "@patternfly/react-core/dist/esm/layouts/Stack/index.js";

Expand All @@ -33,9 +33,7 @@ import {
import { StorageButton, StorageOnOff, StorageBlockNavLink } from "../storage-controls.jsx";

import { SCard } from "../utils/card.jsx";
import { PageChildrenCard, new_page, page_type, block_location } from "../pages.jsx";
import { format_disk, erase_disk } from "../content-views.jsx"; // XXX
import { format_dialog } from "../format-dialog.jsx";
import { PageChildrenCard, new_page } from "../pages.jsx";

import { make_block_pages } from "../create-pages.jsx";

Expand Down Expand Up @@ -134,8 +132,8 @@ class VDODetails extends React.Component {
<Alert variant='danger' isInline
title={_("The creation of this VDO device did not finish and the device can't be used.")}
actionClose={<StorageButton onClick={force_delete}>
{_("Remove device")}
</StorageButton>} />
{_("Remove device")}
</StorageButton>} />
</Card>
</StackItem>
</Stack>
Expand Down Expand Up @@ -295,13 +293,13 @@ class VDODetails extends React.Component {
<StackItem>
<SCard title={cockpit.format(_("VDO device $0"), vdo.name)}
actions={<>
{ block
? <StorageButton onClick={stop}>{_("Stop")}</StorageButton>
: <StorageButton onClick={vdo.start}>{_("Start")}</StorageButton>
}
{ "\n" }
<StorageButton kind="danger" onClick={delete_}>{_("Delete")}</StorageButton>
</>}>
{ block
? <StorageButton onClick={stop}>{_("Stop")}</StorageButton>
: <StorageButton onClick={vdo.start}>{_("Start")}</StorageButton>
}
{ "\n" }
<StorageButton kind="danger" onClick={delete_}>{_("Delete")}</StorageButton>
</>}>
<CardBody>
<DescriptionList className="pf-m-horizontal-on-sm">
<DescriptionListGroup>
Expand All @@ -313,8 +311,8 @@ class VDODetails extends React.Component {
<DescriptionListTerm>{_("Backing device")}</DescriptionListTerm>
<DescriptionListDescription>
{ backing_block
? <StorageBlockNavLink client={client} block={backing_block} />
: vdo.backing_dev
? <StorageBlockNavLink client={client} block={backing_block} />
: vdo.backing_dev
}
</DescriptionListDescription>
</DescriptionListGroup>
Expand All @@ -323,12 +321,12 @@ class VDODetails extends React.Component {
<DescriptionListTerm>{_("Physical")}</DescriptionListTerm>
<DescriptionListDescription>
{ stats
? cockpit.format(_("$0 data + $1 overhead used of $2 ($3)"),
fmt_size(stats.dataBlocksUsed * stats.blockSize),
fmt_size(stats.overheadBlocksUsed * stats.blockSize),
fmt_size(vdo.physical_size),
fmt_perc(stats.usedPercent))
: fmt_size(vdo.physical_size)
? cockpit.format(_("$0 data + $1 overhead used of $2 ($3)"),
fmt_size(stats.dataBlocksUsed * stats.blockSize),
fmt_size(stats.overheadBlocksUsed * stats.blockSize),
fmt_size(vdo.physical_size),
fmt_perc(stats.usedPercent))
: fmt_size(vdo.physical_size)
}
</DescriptionListDescription>
</DescriptionListGroup>
Expand All @@ -337,11 +335,11 @@ class VDODetails extends React.Component {
<DescriptionListTerm>{_("Logical")}</DescriptionListTerm>
<DescriptionListDescription>
{ stats
? cockpit.format(_("$0 used of $1 ($2 saved)"),
fmt_size(stats.logicalBlocksUsed * stats.blockSize),
fmt_size(vdo.logical_size),
fmt_perc(stats.savingPercent))
: fmt_size(vdo.logical_size)
? cockpit.format(_("$0 used of $1 ($2 saved)"),
fmt_size(stats.logicalBlocksUsed * stats.blockSize),
fmt_size(vdo.logical_size),
fmt_perc(stats.savingPercent))
: fmt_size(vdo.logical_size)
}
&nbsp; <StorageButton onClick={grow_logical}>{_("Grow")}</StorageButton>
</DescriptionListDescription>
Expand Down Expand Up @@ -374,10 +372,10 @@ class VDODetails extends React.Component {
</SCard>
</StackItem>
{ block
? (<StackItem>
<PageChildrenCard title={_("Content")} page={this.props.page} />
</StackItem>)
: null
? (<StackItem>
<PageChildrenCard title={_("Content")} page={this.props.page} />
</StackItem>)
: null
}
</Stack>
);
Expand Down
64 changes: 64 additions & 0 deletions test/verify/check-storage-unrecognized
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/python3 -cimport os, sys; os.execv(os.path.dirname(sys.argv[1]) + "/../common/pywrap", sys.argv)

# This file is part of Cockpit.
#
# Copyright (C) 2023 Red Hat, Inc.
#
# Cockpit is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Cockpit is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Cockpit; If not, see <http://www.gnu.org/licenses/>.

import os

Check notice

Code scanning / CodeQL

Unused import Note test

Import of 'os' is not used.
import storagelib
import testlib

@testlib.nondestructive
class TestStorageUnrecognized(storagelib.StorageCase):
def test(self):
m = self.machine
b = self.browser

self.login_and_go("/storage")

disk = self.add_ram_disk()

# Initially, new disks should have zeroes in their superblock
# and be recognized as "unformatted" by Cockpit.

b.wait_visible(self.card_row("Storage", location=disk))
b.wait_not_present(self.card_row("Storage", name=disk))
b.click(self.card_row("Storage", location=disk))
b.wait_in_text(self.card("Content"), "Drive is not formatted")

# This is the superblock of a legacy VDO device. Cockpit does
# not recognize it.

data = """
ZG12ZG8wMDEFAAAABAAAAAAAAABdAAAAAAAAAJQJAgCGsH0mrQgGAC4WnB4G50Fzu20jY6J1rfwA
AAAAAQAAAAAAAAABAAAA2FwKAAAAAAAA////AAAAAAA7tw9zAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
"""
m.execute(f"base64 -d >{disk}", input=data)

b.wait_text(self.card_row_col("Content", 1, 2), "Unrecognized data")
b.click(self.card_row("Content", 1))
b.wait_text(self.card_desc("Unrecognized data", "Usage"), "other")
b.wait_text(self.card_desc("Unrecognized data", "Type"), "vdo")

if __name__ == '__main__':
testlib.test_main()

0 comments on commit 004d989

Please sign in to comment.