Show Warnings when running speed test or diagnostics (#1487)
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> Co-authored-by: Alex <33497058+bexsoft@users.noreply.github.com>
This commit is contained in:
@@ -22,15 +22,15 @@ import {
|
||||
} from "../utils";
|
||||
|
||||
test("A variety of formatting results", () => {
|
||||
expect(niceBytes("1024")).toBe("1.0 KB");
|
||||
expect(niceBytes("1048576")).toBe("1.0 MB");
|
||||
expect(niceBytes("1073741824")).toBe("1.0 GB");
|
||||
expect(niceBytes("1024")).toBe("1.0 KiB");
|
||||
expect(niceBytes("1048576")).toBe("1.0 MiB");
|
||||
expect(niceBytes("1073741824")).toBe("1.0 GiB");
|
||||
});
|
||||
|
||||
test("From value and unit to a number of bytes", () => {
|
||||
expect(getBytes("1", "KB")).toBe("1024");
|
||||
expect(getBytes("1", "MB")).toBe("1048576");
|
||||
expect(getBytes("1", "GB")).toBe("1073741824");
|
||||
expect(getBytes("1", "KiB")).toBe("1024");
|
||||
expect(getBytes("1", "MiB")).toBe("1048576");
|
||||
expect(getBytes("1", "GiB")).toBe("1073741824");
|
||||
});
|
||||
|
||||
test("From value and unit to a number of bytes for kubernetes", () => {
|
||||
|
||||
@@ -26,7 +26,17 @@ import { IPool } from "../screens/Console/Tenants/ListTenants/types";
|
||||
const minStReq = 1073741824; // Minimal Space required for MinIO
|
||||
const minMemReq = 2147483648; // Minimal Memory required for MinIO in bytes
|
||||
|
||||
export const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
||||
export const units = [
|
||||
"B",
|
||||
"KiB",
|
||||
"MiB",
|
||||
"GiB",
|
||||
"TiB",
|
||||
"PiB",
|
||||
"EiB",
|
||||
"ZiB",
|
||||
"YiB",
|
||||
];
|
||||
export const k8sUnits = ["Ki", "Mi", "Gi", "Ti", "Pi", "Ei"];
|
||||
export const k8sCalcUnits = ["B", ...k8sUnits];
|
||||
export const timeUnits = ["ms", "s", "m", "h", "d", "w", "M", "Q", "y"];
|
||||
|
||||
@@ -27,6 +27,7 @@ interface IProgressBarWrapper {
|
||||
ready: boolean;
|
||||
indeterminate?: boolean;
|
||||
withLabel?: boolean;
|
||||
size?: string;
|
||||
}
|
||||
|
||||
const BorderLinearProgress = styled(LinearProgress)(() => ({
|
||||
@@ -39,6 +40,13 @@ const BorderLinearProgress = styled(LinearProgress)(() => ({
|
||||
borderRadius: 5,
|
||||
},
|
||||
}));
|
||||
const SmallBorderLinearProgress = styled(BorderLinearProgress)(() => ({
|
||||
height: 6,
|
||||
borderRadius: 3,
|
||||
[`& .${linearProgressClasses.bar}`]: {
|
||||
borderRadius: 3,
|
||||
},
|
||||
}));
|
||||
|
||||
function LinearProgressWithLabel(props: LinearProgressProps) {
|
||||
return (
|
||||
@@ -58,6 +66,7 @@ const ProgressBarWrapper = ({
|
||||
ready,
|
||||
indeterminate,
|
||||
withLabel,
|
||||
size = "regular",
|
||||
}: IProgressBarWrapper) => {
|
||||
const propsComponent: LinearProgressProps = {
|
||||
variant: indeterminate && !ready ? "indeterminate" : "determinate",
|
||||
@@ -67,6 +76,9 @@ const ProgressBarWrapper = ({
|
||||
if (withLabel) {
|
||||
return <LinearProgressWithLabel {...propsComponent} />;
|
||||
}
|
||||
if (size === "small") {
|
||||
return <SmallBorderLinearProgress {...propsComponent} />;
|
||||
}
|
||||
|
||||
return <BorderLinearProgress {...propsComponent} />;
|
||||
};
|
||||
|
||||
@@ -47,6 +47,8 @@ import { setServerDiagStat, setSnackBarMessage } from "../../../actions";
|
||||
import CircularProgress from "@mui/material/CircularProgress";
|
||||
import TestWrapper from "../Common/TestWrapper/TestWrapper";
|
||||
import PageLayout from "../Common/Layout/PageLayout";
|
||||
import HelpBox from "../../../common/HelpBox";
|
||||
import WarnIcon from "../../../icons/WarnIcon";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
@@ -303,6 +305,18 @@ const HealthInfo = ({
|
||||
</Grid>
|
||||
</TestWrapper>
|
||||
</Grid>
|
||||
{!diagStarted && (
|
||||
<Fragment>
|
||||
<br />
|
||||
<HelpBox
|
||||
title={
|
||||
"During the health diagnostics run all production traffic will be suspended."
|
||||
}
|
||||
iconComponent={<WarnIcon />}
|
||||
help={<Fragment />}
|
||||
/>
|
||||
</Fragment>
|
||||
)}
|
||||
</PageLayout>
|
||||
</Fragment>
|
||||
);
|
||||
|
||||
@@ -35,39 +35,10 @@ import BoxIconButton from "../Common/BoxIconButton/BoxIconButton";
|
||||
import CodeMirrorWrapper from "../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper";
|
||||
import { Area, AreaChart, CartesianGrid, ResponsiveContainer } from "recharts";
|
||||
import { cleanMetrics } from "./utils";
|
||||
|
||||
interface ISTResults {
|
||||
classes: any;
|
||||
results: SpeedTestResponse[];
|
||||
start: boolean;
|
||||
autotune: boolean;
|
||||
}
|
||||
import SpeedTestUnit from "./SpeedTestUnit";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
objectGeneralTitle: {
|
||||
fontWeight: "bold",
|
||||
color: "#000",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
"& svg": {
|
||||
width: 14,
|
||||
},
|
||||
},
|
||||
generalUnit: {
|
||||
color: "#000",
|
||||
marginTop: 6,
|
||||
fontSize: 12,
|
||||
fontWeight: "bold",
|
||||
},
|
||||
testUnitRes: {
|
||||
fontSize: 120,
|
||||
color: "#081C42",
|
||||
fontWeight: "bold",
|
||||
},
|
||||
metricValContainer: {
|
||||
lineHeight: 1,
|
||||
},
|
||||
actionButtons: {
|
||||
textAlign: "right",
|
||||
},
|
||||
@@ -153,17 +124,27 @@ const styles = (theme: Theme) =>
|
||||
},
|
||||
download: {
|
||||
"& .min-icon": {
|
||||
width: 35,
|
||||
height: 35,
|
||||
color: "rgb(113,200,150)",
|
||||
},
|
||||
},
|
||||
upload: {
|
||||
"& .min-icon": {
|
||||
width: 35,
|
||||
height: 35,
|
||||
color: "rgb(66,127,172)",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const STResults = ({ classes, results, start, autotune }: ISTResults) => {
|
||||
interface ISTResults {
|
||||
classes: any;
|
||||
results: SpeedTestResponse[];
|
||||
start: boolean;
|
||||
}
|
||||
|
||||
const STResults = ({ classes, results, start }: ISTResults) => {
|
||||
const [jsonView, setJsonView] = useState<boolean>(false);
|
||||
|
||||
const finalRes = results[results.length - 1] || [];
|
||||
@@ -177,38 +158,6 @@ const STResults = ({ classes, results, start, autotune }: ISTResults) => {
|
||||
const putThroughput = get(finalRes, "PUTStats.throughputPerSec", 0);
|
||||
const putObjects = get(finalRes, "PUTStats.objectsPerSec", 0);
|
||||
|
||||
const ObjectGeneral = ({
|
||||
title,
|
||||
throughput,
|
||||
objects,
|
||||
}: {
|
||||
title: any;
|
||||
throughput: string;
|
||||
objects: number;
|
||||
}) => {
|
||||
const avg = calculateBytes(throughput);
|
||||
|
||||
let total = "--";
|
||||
let unit = "";
|
||||
|
||||
if (avg.total !== 0) {
|
||||
total = avg.total.toString();
|
||||
unit = `${avg.unit}/S`;
|
||||
}
|
||||
|
||||
return (
|
||||
<Grid container>
|
||||
<Grid item xs={12} className={classes.objectGeneralTitle}>
|
||||
{title}
|
||||
</Grid>
|
||||
<Grid item xs={12} md={6} className={classes.metricValContainer}>
|
||||
<span className={classes.testUnitRes}>{total}</span>
|
||||
<span className={classes.generalUnit}>{unit}</span>
|
||||
</Grid>
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
|
||||
let statJoin: IndvServerMetric[] = [];
|
||||
|
||||
getServers.forEach((item) => {
|
||||
@@ -280,31 +229,35 @@ const STResults = ({ classes, results, start, autotune }: ISTResults) => {
|
||||
return (
|
||||
<Fragment>
|
||||
<Grid container className={classes.objectGeneral}>
|
||||
<Grid item xs={12} md={6} lg={4}>
|
||||
<ObjectGeneral
|
||||
title={
|
||||
<div className={classes.download}>
|
||||
<DownloadStatIcon />
|
||||
GET
|
||||
</div>
|
||||
}
|
||||
throughput={getThroughput}
|
||||
objects={getObjects}
|
||||
/>
|
||||
<Grid item xs={12} md={6} lg={6}>
|
||||
<Grid container className={classes.objectGeneral}>
|
||||
<Grid item xs={12} md={6} lg={6}>
|
||||
<SpeedTestUnit
|
||||
icon={
|
||||
<div className={classes.download}>
|
||||
<DownloadStatIcon />
|
||||
</div>
|
||||
}
|
||||
title={"GET"}
|
||||
throughput={getThroughput}
|
||||
objects={getObjects}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid item xs={12} md={6} lg={6}>
|
||||
<SpeedTestUnit
|
||||
icon={
|
||||
<div className={classes.upload}>
|
||||
<UploadStatIcon />
|
||||
</div>
|
||||
}
|
||||
title={"PUT"}
|
||||
throughput={putThroughput}
|
||||
objects={putObjects}
|
||||
/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid item xs={12} md={6} lg={4}>
|
||||
<ObjectGeneral
|
||||
title={
|
||||
<div className={classes.upload}>
|
||||
<UploadStatIcon />
|
||||
PUT
|
||||
</div>
|
||||
}
|
||||
throughput={putThroughput}
|
||||
objects={putObjects}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid item xs={12} md={12} lg={4}>
|
||||
<Grid item xs={12} md={6} lg={6}>
|
||||
<ResponsiveContainer width="99%">
|
||||
<AreaChart data={clnMetrics}>
|
||||
<defs>
|
||||
|
||||
113
portal-ui/src/screens/Console/Speedtest/SpeedTestUnit.tsx
Normal file
113
portal-ui/src/screens/Console/Speedtest/SpeedTestUnit.tsx
Normal file
@@ -0,0 +1,113 @@
|
||||
// This file is part of MinIO Console Server
|
||||
// Copyright (c) 2022 MinIO, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { calculateBytes } from "../../../common/utils";
|
||||
import React from "react";
|
||||
import withStyles from "@mui/styles/withStyles";
|
||||
import { Theme } from "@mui/material/styles";
|
||||
import createStyles from "@mui/styles/createStyles";
|
||||
import clsx from "clsx";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
objectGeneralTitle: {
|
||||
lineHeight: 1,
|
||||
fontSize: 50,
|
||||
color: "#696969",
|
||||
},
|
||||
generalUnit: {
|
||||
color: "#000",
|
||||
fontSize: 12,
|
||||
fontWeight: "bold",
|
||||
},
|
||||
testUnitRes: {
|
||||
fontSize: 60,
|
||||
color: "#081C42",
|
||||
fontWeight: "bold",
|
||||
textAlign: "right",
|
||||
},
|
||||
metricValContainer: {
|
||||
lineHeight: 1,
|
||||
verticalAlign: "bottom",
|
||||
},
|
||||
objectsUnitRes: {
|
||||
fontSize: 22,
|
||||
marginTop: 6,
|
||||
color: "#696969",
|
||||
fontWeight: "bold",
|
||||
textAlign: "right",
|
||||
},
|
||||
objectsUnit: {
|
||||
color: "#696969",
|
||||
fontSize: 16,
|
||||
fontWeight: "bold",
|
||||
},
|
||||
iconTd: {
|
||||
verticalAlign: "bottom",
|
||||
},
|
||||
});
|
||||
|
||||
const SpeedTestUnit = ({
|
||||
classes,
|
||||
title,
|
||||
icon,
|
||||
throughput,
|
||||
objects,
|
||||
}: {
|
||||
classes: any;
|
||||
title: any;
|
||||
icon: any;
|
||||
throughput: string;
|
||||
objects: number;
|
||||
}) => {
|
||||
const avg = calculateBytes(throughput);
|
||||
|
||||
let total = "0";
|
||||
let unit = "";
|
||||
|
||||
if (avg.total !== 0) {
|
||||
total = avg.total.toString();
|
||||
unit = `${avg.unit}/s`;
|
||||
}
|
||||
|
||||
return (
|
||||
<table>
|
||||
<tr>
|
||||
<td className={classes.objectGeneralTitle}>{title}</td>
|
||||
<td className={classes.iconTd}>{icon}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className={clsx(classes.metricValContainer, classes.testUnitRes)}>
|
||||
{total}
|
||||
</td>
|
||||
<td className={clsx(classes.metricValContainer, classes.generalUnit)}>
|
||||
{unit}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td
|
||||
className={clsx(classes.metricValContainer, classes.objectsUnitRes)}
|
||||
>
|
||||
{objects}
|
||||
</td>
|
||||
<td className={clsx(classes.metricValContainer, classes.objectsUnit)}>
|
||||
{objects !== 0 && "Objs/S"}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
);
|
||||
};
|
||||
export default withStyles(styles)(SpeedTestUnit);
|
||||
@@ -21,7 +21,6 @@ import { Button, CircularProgress, Grid } from "@mui/material";
|
||||
import { Theme } from "@mui/material/styles";
|
||||
import createStyles from "@mui/styles/createStyles";
|
||||
import withStyles from "@mui/styles/withStyles";
|
||||
import ArrowForwardIosIcon from "@mui/icons-material/ArrowForwardIos";
|
||||
import moment from "moment/moment";
|
||||
import PageHeader from "../Common/PageHeader/PageHeader";
|
||||
import {
|
||||
@@ -43,10 +42,11 @@ import STResults from "./STResults";
|
||||
import InputBoxWrapper from "../Common/FormComponents/InputBoxWrapper/InputBoxWrapper";
|
||||
import ProgressBarWrapper from "../Common/ProgressBarWrapper/ProgressBarWrapper";
|
||||
import InputUnitMenu from "../Common/FormComponents/InputUnitMenu/InputUnitMenu";
|
||||
import CheckboxWrapper from "../Common/FormComponents/CheckboxWrapper/CheckboxWrapper";
|
||||
import PageLayout from "../Common/Layout/PageLayout";
|
||||
import SecureComponent from "../../../common/SecureComponent/SecureComponent";
|
||||
import DistributedOnly from "../Common/DistributedOnly/DistributedOnly";
|
||||
import HelpBox from "../../../common/HelpBox";
|
||||
import WarnIcon from "../../../icons/WarnIcon";
|
||||
|
||||
interface ISpeedtest {
|
||||
classes: any;
|
||||
@@ -68,9 +68,7 @@ const styles = (theme: Theme) =>
|
||||
paddingBottom: 15,
|
||||
},
|
||||
},
|
||||
progressContainer: {
|
||||
padding: "0 15px",
|
||||
},
|
||||
|
||||
stepProgressText: {
|
||||
fontSize: 13,
|
||||
marginBottom: 8,
|
||||
@@ -94,17 +92,14 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
const [currStatus, setCurrStatus] = useState<SpeedTestResponse[] | null>(
|
||||
null
|
||||
);
|
||||
const [duration, setDuration] = useState<string>("10");
|
||||
const [durationUnit, setDurationUnit] = useState<string>("s");
|
||||
|
||||
const [size, setSize] = useState<string>("64");
|
||||
const [sizeUnit, setSizeUnit] = useState<string>("MB");
|
||||
const [concurrent, setConcurrent] = useState<string>("32");
|
||||
|
||||
const [topDate, setTopDate] = useState<number>(0);
|
||||
const [currentValue, setCurrentValue] = useState<number>(0);
|
||||
const [totalSeconds, setTotalSeconds] = useState<number>(0);
|
||||
const [speedometerValue, setSpeedometerValue] = useState<number>(0);
|
||||
const [advancedOpen, setAdvancedOpen] = useState<boolean>(false);
|
||||
const [autotune, setAutotune] = useState<boolean>(true);
|
||||
|
||||
useEffect(() => {
|
||||
// begin watch if bucketName in bucketList and start pressed
|
||||
@@ -115,11 +110,7 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
|
||||
const wsProt = wsProtocol(url.protocol);
|
||||
const c = new W3CWebSocket(
|
||||
`${wsProt}://${url.hostname}:${port}/ws/speedtest?${
|
||||
autotune ? "autotune=true" : ""
|
||||
}&duration=${duration}${durationUnit}&size=${size}${sizeUnit}${
|
||||
concurrent.trim() !== "" ? `&concurrent=${concurrent}` : ""
|
||||
}`
|
||||
`${wsProt}://${url.hostname}:${port}/ws/speedtest?&size=${size}${sizeUnit}`
|
||||
);
|
||||
|
||||
const baseDate = moment();
|
||||
@@ -128,10 +119,7 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
|
||||
const incrementDate =
|
||||
baseDate
|
||||
.add(
|
||||
parseInt(duration) * 2,
|
||||
durationUnit as moment.unitOfTime.DurationConstructor
|
||||
)
|
||||
.add(parseInt("10") * 2, "s" as moment.unitOfTime.DurationConstructor)
|
||||
.unix() / 1000;
|
||||
|
||||
const totalSeconds = (incrementDate - currentTime) / 1000;
|
||||
@@ -182,7 +170,7 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
// reset start status
|
||||
setStart(false);
|
||||
}
|
||||
}, [concurrent, duration, durationUnit, size, sizeUnit, start, autotune]);
|
||||
}, [size, sizeUnit, start]);
|
||||
|
||||
useEffect(() => {
|
||||
const actualSeconds = (topDate - currentValue) / 1000;
|
||||
@@ -212,7 +200,61 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
>
|
||||
<Grid item xs={12} className={classes.boxy}>
|
||||
<Grid container>
|
||||
<Grid item>
|
||||
<Grid item md={6} sm={12}>
|
||||
<div className={classes.stepProgressText}>
|
||||
{start ? (
|
||||
<Fragment>
|
||||
Speedtest in progress...
|
||||
<CircularProgress size={15} />
|
||||
</Fragment>
|
||||
) : (
|
||||
<Fragment>
|
||||
{currStatus && !start ? (
|
||||
<b>Speed Test results:</b>
|
||||
) : (
|
||||
<b>Performance test</b>
|
||||
)}
|
||||
</Fragment>
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<ProgressBarWrapper
|
||||
value={speedometerValue}
|
||||
ready={currStatus !== null && !start}
|
||||
indeterminate={start}
|
||||
size={"small"}
|
||||
/>
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<div style={{ marginLeft: 10, width: 300 }}>
|
||||
<InputBoxWrapper
|
||||
id={"size"}
|
||||
name={"size"}
|
||||
label={"Object Size"}
|
||||
onChange={(e) => {
|
||||
setSize(e.target.value);
|
||||
}}
|
||||
noLabelMinWidth={true}
|
||||
value={size}
|
||||
disabled={start}
|
||||
overlayObject={
|
||||
<InputUnitMenu
|
||||
id={"size-unit"}
|
||||
onUnitChange={setSizeUnit}
|
||||
unitSelected={sizeUnit}
|
||||
unitsList={[
|
||||
{ label: "KiB", value: "KiB" },
|
||||
{ label: "MiB", value: "MiB" },
|
||||
{ label: "GiB", value: "GiB" },
|
||||
]}
|
||||
disabled={start}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={2} textAlign={"right"}>
|
||||
<Button
|
||||
onClick={() => {
|
||||
setCurrStatus(null);
|
||||
@@ -220,13 +262,12 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
}}
|
||||
color="primary"
|
||||
type="button"
|
||||
id={"start-speed-test"}
|
||||
variant={
|
||||
currStatus !== null && !start ? "contained" : "outlined"
|
||||
}
|
||||
className={`${classes.buttonBackground} ${classes.speedStart}`}
|
||||
disabled={
|
||||
duration.trim() === "" || size.trim() === "" || start
|
||||
}
|
||||
disabled={"10".trim() === "" || size.trim() === "" || start}
|
||||
>
|
||||
{!start && (
|
||||
<Fragment>
|
||||
@@ -236,168 +277,6 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
{start ? "Start" : ""}
|
||||
</Button>
|
||||
</Grid>
|
||||
<Grid item md={9} sm={12} className={classes.progressContainer}>
|
||||
<div className={classes.stepProgressText}>
|
||||
{start ? (
|
||||
"Speedtest in progress..."
|
||||
) : (
|
||||
<Fragment>
|
||||
{currStatus && !start
|
||||
? "Done!"
|
||||
: "Start a new speed test"}
|
||||
</Fragment>
|
||||
)}
|
||||
{start && <CircularProgress size={15} />}
|
||||
</div>
|
||||
<div>
|
||||
<ProgressBarWrapper
|
||||
value={speedometerValue}
|
||||
ready={currStatus !== null && !start}
|
||||
indeterminate={autotune && start}
|
||||
/>
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item className={classes.advancedButton}>
|
||||
<button
|
||||
onClick={() => {
|
||||
setAdvancedOpen(!advancedOpen);
|
||||
}}
|
||||
className={classes.advancedConfiguration}
|
||||
>
|
||||
{advancedOpen ? "Hide" : "Show"} advanced options{" "}
|
||||
<span
|
||||
className={
|
||||
advancedOpen
|
||||
? classes.advancedOpen
|
||||
: classes.advancedClosed
|
||||
}
|
||||
>
|
||||
<ArrowForwardIosIcon />
|
||||
</span>
|
||||
</button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid
|
||||
container
|
||||
className={`${classes.advancedContent} ${
|
||||
advancedOpen ? "open" : ""
|
||||
}`}
|
||||
>
|
||||
<Grid item xs={12}>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="space-around"
|
||||
alignItems="center"
|
||||
>
|
||||
<Grid
|
||||
item
|
||||
xs={12}
|
||||
md={4}
|
||||
className={classes.advancedOption}
|
||||
>
|
||||
<InputBoxWrapper
|
||||
id={"size"}
|
||||
name={"size"}
|
||||
label={"Object Size"}
|
||||
onChange={(e) => {
|
||||
setSize(e.target.value);
|
||||
}}
|
||||
value={size}
|
||||
disabled={start}
|
||||
overlayObject={
|
||||
<InputUnitMenu
|
||||
id={"size-unit"}
|
||||
onUnitChange={setSizeUnit}
|
||||
unitSelected={sizeUnit}
|
||||
unitsList={[
|
||||
{ label: "KB", value: "KB" },
|
||||
{ label: "MB", value: "MB" },
|
||||
{ label: "GB", value: "GB" },
|
||||
]}
|
||||
disabled={start}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid
|
||||
item
|
||||
xs={12}
|
||||
md={4}
|
||||
className={classes.advancedAutotune}
|
||||
>
|
||||
<CheckboxWrapper
|
||||
checked={autotune}
|
||||
onChange={(e) => setAutotune(e.target.checked)}
|
||||
id={"autotune"}
|
||||
name={"autotune"}
|
||||
label={"Enable Autotune"}
|
||||
tooltip={
|
||||
"Autotune gets the maximum stats for the system by testing multiple configurations at once. This configuration is enabled by default and overrides duration & concurrent requests options"
|
||||
}
|
||||
value="true"
|
||||
disabled={start}
|
||||
/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid item xs={12}>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="space-around"
|
||||
alignItems="center"
|
||||
>
|
||||
<Grid
|
||||
item
|
||||
xs={12}
|
||||
md={4}
|
||||
className={classes.advancedOption}
|
||||
>
|
||||
<InputBoxWrapper
|
||||
id={"duration"}
|
||||
name={"duration"}
|
||||
label={"Duration"}
|
||||
onChange={(e) => {
|
||||
setDuration(e.target.value);
|
||||
}}
|
||||
value={duration}
|
||||
disabled={start || autotune}
|
||||
overlayObject={
|
||||
<InputUnitMenu
|
||||
id={"duration-unit"}
|
||||
onUnitChange={setDurationUnit}
|
||||
unitSelected={durationUnit}
|
||||
unitsList={[
|
||||
{ label: "miliseconds", value: "ms" },
|
||||
{ label: "seconds", value: "s" },
|
||||
]}
|
||||
disabled={start || autotune}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid
|
||||
item
|
||||
xs={12}
|
||||
md={4}
|
||||
className={classes.advancedOption}
|
||||
>
|
||||
<InputBoxWrapper
|
||||
type="number"
|
||||
min="0"
|
||||
id={"concurrent"}
|
||||
name={"concurrent"}
|
||||
label={"Concurrent Requests"}
|
||||
onChange={(e) => {
|
||||
setConcurrent(e.target.value);
|
||||
}}
|
||||
value={concurrent}
|
||||
disabled={start || autotune}
|
||||
/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid container className={classes.multiModule}>
|
||||
<Grid item xs={12}>
|
||||
@@ -405,11 +284,7 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
<Grid item xs={12}>
|
||||
{currStatus !== null && (
|
||||
<Fragment>
|
||||
<STResults
|
||||
results={currStatus}
|
||||
start={start}
|
||||
autotune={autotune}
|
||||
/>
|
||||
<STResults results={currStatus} start={start} />
|
||||
</Fragment>
|
||||
)}
|
||||
</Grid>
|
||||
@@ -417,6 +292,19 @@ const Speedtest = ({ classes, distributedSetup }: ISpeedtest) => {
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
{!start && !currStatus && (
|
||||
<Fragment>
|
||||
<br />
|
||||
<HelpBox
|
||||
title={
|
||||
"During the speed test all your production traffic will be temporarily suspended."
|
||||
}
|
||||
iconComponent={<WarnIcon />}
|
||||
help={<Fragment />}
|
||||
/>
|
||||
</Fragment>
|
||||
)}
|
||||
</SecureComponent>
|
||||
)}
|
||||
</PageLayout>
|
||||
|
||||
84
portal-ui/tests/scripts/common.sh
Normal file
84
portal-ui/tests/scripts/common.sh
Normal file
@@ -0,0 +1,84 @@
|
||||
# This file is part of MinIO Console Server
|
||||
# Copyright (c) 2022 MinIO, Inc.
|
||||
# # This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# # This program 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 Affero General Public License for more details.
|
||||
# # You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
|
||||
add_alias() {
|
||||
for i in $(seq 1 4); do
|
||||
echo "... attempting to add alias $i"
|
||||
until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do
|
||||
echo "...waiting... for 5secs" && sleep 5
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
create_policies() {
|
||||
mc admin policy add minio bucketassignpolicy-$TIMESTAMP portal-ui/tests/policies/bucketAssignPolicy.json
|
||||
mc admin policy add minio bucketread-$TIMESTAMP portal-ui/tests/policies/bucketRead.json
|
||||
mc admin policy add minio bucketwrite-$TIMESTAMP portal-ui/tests/policies/bucketWrite.json
|
||||
mc admin policy add minio dashboard-$TIMESTAMP portal-ui/tests/policies/dashboard.json
|
||||
mc admin policy add minio diagnostics-$TIMESTAMP portal-ui/tests/policies/diagnostics.json
|
||||
mc admin policy add minio groups-$TIMESTAMP portal-ui/tests/policies/groups.json
|
||||
mc admin policy add minio heal-$TIMESTAMP portal-ui/tests/policies/heal.json
|
||||
mc admin policy add minio iampolicies-$TIMESTAMP portal-ui/tests/policies/iamPolicies.json
|
||||
mc admin policy add minio logs-$TIMESTAMP portal-ui/tests/policies/logs.json
|
||||
mc admin policy add minio notificationendpoints-$TIMESTAMP portal-ui/tests/policies/notificationEndpoints.json
|
||||
mc admin policy add minio settings-$TIMESTAMP portal-ui/tests/policies/settings.json
|
||||
mc admin policy add minio tiers-$TIMESTAMP portal-ui/tests/policies/tiers.json
|
||||
mc admin policy add minio trace-$TIMESTAMP portal-ui/tests/policies/trace.json
|
||||
mc admin policy add minio users-$TIMESTAMP portal-ui/tests/policies/users.json
|
||||
mc admin policy add minio watch-$TIMESTAMP portal-ui/tests/policies/watch.json
|
||||
mc admin policy add minio bucketwriteprefixonlypolicy-$TIMESTAMP portal-ui/tests/policies/bucketWritePrefixOnlyPolicy.json
|
||||
}
|
||||
|
||||
create_users() {
|
||||
mc admin user add minio bucketassignpolicy-$TIMESTAMP bucketassignpolicy
|
||||
mc admin user add minio bucketread-$TIMESTAMP bucketread
|
||||
mc admin user add minio bucketwrite-$TIMESTAMP bucketwrite
|
||||
mc admin user add minio dashboard-$TIMESTAMP dashboard
|
||||
mc admin user add minio diagnostics-$TIMESTAMP diagnostics
|
||||
mc admin user add minio groups-$TIMESTAMP groups1234
|
||||
mc admin user add minio heal-$TIMESTAMP heal1234
|
||||
mc admin user add minio iampolicies-$TIMESTAMP iampolicies
|
||||
mc admin user add minio logs-$TIMESTAMP logs1234
|
||||
mc admin user add minio notificationendpoints-$TIMESTAMP notificationendpoints
|
||||
mc admin user add minio settings-$TIMESTAMP settings
|
||||
mc admin user add minio tiers-$TIMESTAMP tiers1234
|
||||
mc admin user add minio trace-$TIMESTAMP trace1234
|
||||
mc admin user add minio users-$TIMESTAMP users1234
|
||||
mc admin user add minio watch-$TIMESTAMP watch1234
|
||||
mc admin user add minio bucketwriteprefixonlypolicy-$TIMESTAMP bucketwriteprefixonlypolicy
|
||||
}
|
||||
|
||||
create_buckets() {
|
||||
mc mb minio/testcafe && mc cp ./portal-ui/tests/uploads/test.txt minio/testcafe/write/test.txt
|
||||
}
|
||||
|
||||
assign_policies() {
|
||||
mc admin policy set minio bucketassignpolicy-$TIMESTAMP user=bucketassignpolicy-$TIMESTAMP
|
||||
mc admin policy set minio bucketread-$TIMESTAMP user=bucketread-$TIMESTAMP
|
||||
mc admin policy set minio bucketwrite-$TIMESTAMP user=bucketwrite-$TIMESTAMP
|
||||
mc admin policy set minio dashboard-$TIMESTAMP user=dashboard-$TIMESTAMP
|
||||
mc admin policy set minio diagnostics-$TIMESTAMP user=diagnostics-$TIMESTAMP
|
||||
mc admin policy set minio groups-$TIMESTAMP user=groups-$TIMESTAMP
|
||||
mc admin policy set minio heal-$TIMESTAMP user=heal-$TIMESTAMP
|
||||
mc admin policy set minio iampolicies-$TIMESTAMP user=iampolicies-$TIMESTAMP
|
||||
mc admin policy set minio logs-$TIMESTAMP user=logs-$TIMESTAMP
|
||||
mc admin policy set minio notificationendpoints-$TIMESTAMP user=notificationendpoints-$TIMESTAMP
|
||||
mc admin policy set minio settings-$TIMESTAMP user=settings-$TIMESTAMP
|
||||
mc admin policy set minio tiers-$TIMESTAMP user=tiers-$TIMESTAMP
|
||||
mc admin policy set minio trace-$TIMESTAMP user=trace-$TIMESTAMP
|
||||
mc admin policy set minio users-$TIMESTAMP user=users-$TIMESTAMP
|
||||
mc admin policy set minio watch-$TIMESTAMP user=watch-$TIMESTAMP
|
||||
mc admin policy set minio bucketwriteprefixonlypolicy-$TIMESTAMP user=bucketwriteprefixonlypolicy-$TIMESTAMP
|
||||
}
|
||||
@@ -1,65 +1,19 @@
|
||||
add_alias() {
|
||||
for i in $(seq 1 4); do
|
||||
echo "... attempting to add alias $i"
|
||||
until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do
|
||||
echo "...waiting... for 5secs" && sleep 5
|
||||
done
|
||||
done
|
||||
}
|
||||
# This file is part of MinIO Console Server
|
||||
# Copyright (c) 2022 MinIO, Inc.
|
||||
# # This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# # This program 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 Affero General Public License for more details.
|
||||
# # You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
create_policies() {
|
||||
mc admin policy add minio bucketassignpolicy-$TIMESTAMP portal-ui/tests/policies/bucketAssignPolicy.json
|
||||
mc admin policy add minio bucketread-$TIMESTAMP portal-ui/tests/policies/bucketRead.json
|
||||
mc admin policy add minio bucketwrite-$TIMESTAMP portal-ui/tests/policies/bucketWrite.json
|
||||
mc admin policy add minio dashboard-$TIMESTAMP portal-ui/tests/policies/dashboard.json
|
||||
mc admin policy add minio diagnostics-$TIMESTAMP portal-ui/tests/policies/diagnostics.json
|
||||
mc admin policy add minio groups-$TIMESTAMP portal-ui/tests/policies/groups.json
|
||||
mc admin policy add minio heal-$TIMESTAMP portal-ui/tests/policies/heal.json
|
||||
mc admin policy add minio iampolicies-$TIMESTAMP portal-ui/tests/policies/iamPolicies.json
|
||||
mc admin policy add minio logs-$TIMESTAMP portal-ui/tests/policies/logs.json
|
||||
mc admin policy add minio notificationendpoints-$TIMESTAMP portal-ui/tests/policies/notificationEndpoints.json
|
||||
mc admin policy add minio settings-$TIMESTAMP portal-ui/tests/policies/settings.json
|
||||
mc admin policy add minio tiers-$TIMESTAMP portal-ui/tests/policies/tiers.json
|
||||
mc admin policy add minio trace-$TIMESTAMP portal-ui/tests/policies/trace.json
|
||||
mc admin policy add minio users-$TIMESTAMP portal-ui/tests/policies/users.json
|
||||
mc admin policy add minio watch-$TIMESTAMP portal-ui/tests/policies/watch.json
|
||||
}
|
||||
|
||||
create_users() {
|
||||
mc admin user add minio bucketassignpolicy-$TIMESTAMP bucketassignpolicy
|
||||
mc admin user add minio bucketread-$TIMESTAMP bucketread
|
||||
mc admin user add minio bucketwrite-$TIMESTAMP bucketwrite
|
||||
mc admin user add minio dashboard-$TIMESTAMP dashboard
|
||||
mc admin user add minio diagnostics-$TIMESTAMP diagnostics
|
||||
mc admin user add minio groups-$TIMESTAMP groups1234
|
||||
mc admin user add minio heal-$TIMESTAMP heal1234
|
||||
mc admin user add minio iampolicies-$TIMESTAMP iampolicies
|
||||
mc admin user add minio logs-$TIMESTAMP logs1234
|
||||
mc admin user add minio notificationendpoints-$TIMESTAMP notificationendpoints
|
||||
mc admin user add minio settings-$TIMESTAMP settings
|
||||
mc admin user add minio tiers-$TIMESTAMP tiers1234
|
||||
mc admin user add minio trace-$TIMESTAMP trace1234
|
||||
mc admin user add minio users-$TIMESTAMP users1234
|
||||
mc admin user add minio watch-$TIMESTAMP watch1234
|
||||
}
|
||||
|
||||
assign_policies() {
|
||||
mc admin policy set minio bucketassignpolicy-$TIMESTAMP user=bucketassignpolicy-$TIMESTAMP
|
||||
mc admin policy set minio bucketread-$TIMESTAMP user=bucketread-$TIMESTAMP
|
||||
mc admin policy set minio bucketwrite-$TIMESTAMP user=bucketwrite-$TIMESTAMP
|
||||
mc admin policy set minio dashboard-$TIMESTAMP user=dashboard-$TIMESTAMP
|
||||
mc admin policy set minio diagnostics-$TIMESTAMP user=diagnostics-$TIMESTAMP
|
||||
mc admin policy set minio groups-$TIMESTAMP user=groups-$TIMESTAMP
|
||||
mc admin policy set minio heal-$TIMESTAMP user=heal-$TIMESTAMP
|
||||
mc admin policy set minio iampolicies-$TIMESTAMP user=iampolicies-$TIMESTAMP
|
||||
mc admin policy set minio logs-$TIMESTAMP user=logs-$TIMESTAMP
|
||||
mc admin policy set minio notificationendpoints-$TIMESTAMP user=notificationendpoints-$TIMESTAMP
|
||||
mc admin policy set minio settings-$TIMESTAMP user=settings-$TIMESTAMP
|
||||
mc admin policy set minio tiers-$TIMESTAMP user=tiers-$TIMESTAMP
|
||||
mc admin policy set minio trace-$TIMESTAMP user=trace-$TIMESTAMP
|
||||
mc admin policy set minio users-$TIMESTAMP user=users-$TIMESTAMP
|
||||
mc admin policy set minio watch-$TIMESTAMP user=watch-$TIMESTAMP
|
||||
}
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
export SCRIPT_DIR
|
||||
source "${SCRIPT_DIR}/common.sh"
|
||||
|
||||
__init__() {
|
||||
export TIMESTAMP=$(date "+%s")
|
||||
|
||||
@@ -1,72 +1,19 @@
|
||||
add_alias() {
|
||||
for i in $(seq 1 4); do
|
||||
echo "... attempting to add alias $i"
|
||||
until (mc alias set minio http://127.0.0.1:9000 minioadmin minioadmin); do
|
||||
echo "...waiting... for 5secs" && sleep 5
|
||||
done
|
||||
done
|
||||
}
|
||||
# This file is part of MinIO Console Server
|
||||
# Copyright (c) 2022 MinIO, Inc.
|
||||
# # This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# # This program 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 Affero General Public License for more details.
|
||||
# # You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
create_policies() {
|
||||
mc admin policy add minio bucketassignpolicy-$TIMESTAMP portal-ui/tests/policies/bucketAssignPolicy.json
|
||||
mc admin policy add minio bucketread-$TIMESTAMP portal-ui/tests/policies/bucketRead.json
|
||||
mc admin policy add minio bucketwrite-$TIMESTAMP portal-ui/tests/policies/bucketWrite.json
|
||||
mc admin policy add minio dashboard-$TIMESTAMP portal-ui/tests/policies/dashboard.json
|
||||
mc admin policy add minio diagnostics-$TIMESTAMP portal-ui/tests/policies/diagnostics.json
|
||||
mc admin policy add minio groups-$TIMESTAMP portal-ui/tests/policies/groups.json
|
||||
mc admin policy add minio heal-$TIMESTAMP portal-ui/tests/policies/heal.json
|
||||
mc admin policy add minio iampolicies-$TIMESTAMP portal-ui/tests/policies/iamPolicies.json
|
||||
mc admin policy add minio logs-$TIMESTAMP portal-ui/tests/policies/logs.json
|
||||
mc admin policy add minio notificationendpoints-$TIMESTAMP portal-ui/tests/policies/notificationEndpoints.json
|
||||
mc admin policy add minio settings-$TIMESTAMP portal-ui/tests/policies/settings.json
|
||||
mc admin policy add minio tiers-$TIMESTAMP portal-ui/tests/policies/tiers.json
|
||||
mc admin policy add minio trace-$TIMESTAMP portal-ui/tests/policies/trace.json
|
||||
mc admin policy add minio users-$TIMESTAMP portal-ui/tests/policies/users.json
|
||||
mc admin policy add minio watch-$TIMESTAMP portal-ui/tests/policies/watch.json
|
||||
mc admin policy add minio bucketwriteprefixonlypolicy-$TIMESTAMP portal-ui/tests/policies/bucketWritePrefixOnlyPolicy.json
|
||||
}
|
||||
|
||||
create_users() {
|
||||
mc admin user add minio bucketassignpolicy-$TIMESTAMP bucketassignpolicy
|
||||
mc admin user add minio bucketread-$TIMESTAMP bucketread
|
||||
mc admin user add minio bucketwrite-$TIMESTAMP bucketwrite
|
||||
mc admin user add minio dashboard-$TIMESTAMP dashboard
|
||||
mc admin user add minio diagnostics-$TIMESTAMP diagnostics
|
||||
mc admin user add minio groups-$TIMESTAMP groups1234
|
||||
mc admin user add minio heal-$TIMESTAMP heal1234
|
||||
mc admin user add minio iampolicies-$TIMESTAMP iampolicies
|
||||
mc admin user add minio logs-$TIMESTAMP logs1234
|
||||
mc admin user add minio notificationendpoints-$TIMESTAMP notificationendpoints
|
||||
mc admin user add minio settings-$TIMESTAMP settings
|
||||
mc admin user add minio tiers-$TIMESTAMP tiers1234
|
||||
mc admin user add minio trace-$TIMESTAMP trace1234
|
||||
mc admin user add minio users-$TIMESTAMP users1234
|
||||
mc admin user add minio watch-$TIMESTAMP watch1234
|
||||
mc admin user add minio bucketwriteprefixonlypolicy-$TIMESTAMP bucketwriteprefixonlypolicy
|
||||
}
|
||||
|
||||
create_buckets() {
|
||||
mc mb minio/testcafe && mc cp ./portal-ui/tests/uploads/test.txt minio/testcafe/write/test.txt
|
||||
}
|
||||
|
||||
assign_policies() {
|
||||
mc admin policy set minio bucketassignpolicy-$TIMESTAMP user=bucketassignpolicy-$TIMESTAMP
|
||||
mc admin policy set minio bucketread-$TIMESTAMP user=bucketread-$TIMESTAMP
|
||||
mc admin policy set minio bucketwrite-$TIMESTAMP user=bucketwrite-$TIMESTAMP
|
||||
mc admin policy set minio dashboard-$TIMESTAMP user=dashboard-$TIMESTAMP
|
||||
mc admin policy set minio diagnostics-$TIMESTAMP user=diagnostics-$TIMESTAMP
|
||||
mc admin policy set minio groups-$TIMESTAMP user=groups-$TIMESTAMP
|
||||
mc admin policy set minio heal-$TIMESTAMP user=heal-$TIMESTAMP
|
||||
mc admin policy set minio iampolicies-$TIMESTAMP user=iampolicies-$TIMESTAMP
|
||||
mc admin policy set minio logs-$TIMESTAMP user=logs-$TIMESTAMP
|
||||
mc admin policy set minio notificationendpoints-$TIMESTAMP user=notificationendpoints-$TIMESTAMP
|
||||
mc admin policy set minio settings-$TIMESTAMP user=settings-$TIMESTAMP
|
||||
mc admin policy set minio tiers-$TIMESTAMP user=tiers-$TIMESTAMP
|
||||
mc admin policy set minio trace-$TIMESTAMP user=trace-$TIMESTAMP
|
||||
mc admin policy set minio users-$TIMESTAMP user=users-$TIMESTAMP
|
||||
mc admin policy set minio watch-$TIMESTAMP user=watch-$TIMESTAMP
|
||||
mc admin policy set minio bucketwriteprefixonlypolicy-$TIMESTAMP user=bucketwriteprefixonlypolicy-$TIMESTAMP
|
||||
}
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
export SCRIPT_DIR
|
||||
source "${SCRIPT_DIR}/common.sh"
|
||||
|
||||
remove_users() {
|
||||
mc admin user remove minio bucketassignpolicy-$TIMESTAMP
|
||||
|
||||
@@ -766,6 +766,25 @@ func Test_GetBucketRetentionConfig(t *testing.T) {
|
||||
},
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "Get Bucket Retention Config Compliance",
|
||||
args: args{
|
||||
ctx: ctx,
|
||||
client: minClient,
|
||||
bucketName: "test",
|
||||
getRetentionFunc: func(ctx context.Context, bucketName string) (mode *minio.RetentionMode, validity *uint, unit *minio.ValidityUnit, err error) {
|
||||
m := minio.Compliance
|
||||
u := minio.Days
|
||||
return &m, swag.Uint(2), &u, nil
|
||||
},
|
||||
},
|
||||
expectedResponse: &models.GetBucketRetentionConfig{
|
||||
Mode: models.ObjectRetentionModeCompliance,
|
||||
Unit: models.ObjectRetentionUnitDays,
|
||||
Validity: int32(2),
|
||||
},
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "Handle Error on minio func",
|
||||
args: args{
|
||||
|
||||
Reference in New Issue
Block a user