Skip to content

Commit

Permalink
feat: update
Browse files Browse the repository at this point in the history
Signed-off-by: suzhou <[email protected]>
  • Loading branch information
SuZhou-Joe committed Jan 5, 2023
1 parent b52cb09 commit 9517d4a
Show file tree
Hide file tree
Showing 37 changed files with 3,491 additions and 123 deletions.
6 changes: 3 additions & 3 deletions cypress/integration/aliases.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe("Aliases", () => {
});
});

describe("shows more flyout", () => {
describe("shows more modal", () => {
it("successfully", () => {
cy.get('[placeholder="Search..."]').type("alias-for-test-0{enter}");
cy.contains("alias-for-test-0");
Expand All @@ -64,7 +64,7 @@ describe("Aliases", () => {
cy.get('[data-test-subj="form-name-indexArray"] [data-test-subj="comboBoxSearchInput"]').type(
`${EDIT_INDEX}{enter}${SAMPLE_INDEX_PREFIX}-*{enter}`
);
cy.get(".euiFlyoutFooter .euiButton--fill").click().get('[data-test-subj="9 more"]').should("exist");
cy.get(".euiModalFooter .euiButton--fill").click().get('[data-test-subj="9 more"]').should("exist");
});
});

Expand All @@ -89,7 +89,7 @@ describe("Aliases", () => {
.click()
.get(`[title="${SAMPLE_INDEX_PREFIX}-1"] button`)
.click()
.get(".euiFlyoutFooter .euiButton--fill")
.get(".euiModalFooter .euiButton--fill")
.click()
.end();

Expand Down
41 changes: 41 additions & 0 deletions cypress/integration/indices_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,47 @@ describe("Indices", () => {
});
});

describe("can shrink an index", () => {
before(() => {
cy.deleteAllIndices();
cy.createIndex(SAMPLE_INDEX, null, {
settings: { "index.blocks.write": true, "index.number_of_shards": 2, "index.number_of_replicas": 0 },
});
});

it("successfully shrink an index", () => {
// Type in SAMPLE_INDEX in search input
cy.get(`input[type="search"]`).focus().type(SAMPLE_INDEX);

cy.wait(1000).get(".euiTableRow").should("have.length", 1);
// Confirm we have our initial index
cy.contains(SAMPLE_INDEX);

cy.get('[data-test-subj="moreAction"]').click();
// Shrink btn should be disabled if no items selected
cy.get('[data-test-subj="Shrink Action"]').should("have.class", "euiContextMenuItem-isDisabled");

// Select an index
cy.get(`[data-test-subj="checkboxSelectRow-${SAMPLE_INDEX}"]`).check({ force: true });

cy.get('[data-test-subj="moreAction"]').click();
// Shrink btn should be enabled
cy.get('[data-test-subj="Shrink Action"]').should("exist").should("not.have.class", "euiContextMenuItem-isDisabled").click();

// Check for Shrink page
cy.contains("Shrink index");

// Enter target index name
cy.get(`input[data-test-subj="targetIndexNameInput"]`).type(`${SAMPLE_INDEX}_shrunken`);

// Click shrink index button
cy.get("button").contains("Shrink").click({ force: true });

// Check for success toast
cy.contains(`Successfully started shrinking ${SAMPLE_INDEX}. The shrunken index will be named ${SAMPLE_INDEX}_shrunken.`);
});
});

describe("can close and open an index", () => {
before(() => {
cy.deleteAllIndices();
Expand Down
184 changes: 184 additions & 0 deletions cypress/integration/split_index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
import { PLUGIN_NAME } from "../support/constants";

const sampleIndex = "index-split";
const sampleAlias = "alias-split";

describe("Split Index", () => {
before(() => {
// Set welcome screen tracking to false
localStorage.setItem("home:welcome:show", "false");
cy.deleteAllIndices();
});

describe("can be created and updated", () => {
beforeEach(() => {
// Visit ISM OSD
cy.visit(`${Cypress.env("opensearch_dashboards")}/app/${PLUGIN_NAME}#/indices`);
cy.contains("Rows per page", { timeout: 60000 });
});

let splitNumber = 2;
let replicaNumber = 1;
it("Create an index successfully", () => {
// enter create page
cy.get('[data-test-subj="Create IndexButton"]').click();
cy.contains("Create index");

// type field name
cy.get('[placeholder="Specify a name for the new index."]').type(sampleIndex).end();

cy.get('[data-test-subj="comboBoxSearchInput"]').focus().type(`${sampleAlias}`).end();

// click create
cy.get('[data-test-subj="createIndexCreateButton"]').click({ force: true }).end();

// The index should exist
cy.get(`#_selection_column_${sampleIndex}-checkbox`).should("have.exist").end();

cy.get(`[data-test-subj="viewIndexDetailButton-${sampleIndex}"]`).click().end();
cy.get("#indexDetailModalSettings").click().end();

cy.get('[data-test-subj="form-name-index.number_of_shards"] .euiText').then(($shardNumber) => {
splitNumber = $shardNumber.attr("title") * 2;
});

cy.get("#indexDetailModalAlias").click().end();
cy.get(`[title="${sampleAlias}"]`).should("exist").end();

// Update Index status to blocks write otherwise we can't apply split operation on it
cy.updateIndexSettings(sampleIndex, { "index.blocks.write": "true" }).end();
}); // create index

it("Split successfully", () => {
const targetIndex = `${sampleIndex}` + "-target";
cy.get(`[data-test-subj="checkboxSelectRow-${sampleIndex}"]`)
.click()
.end()
.get('[data-test-subj="moreAction"]')
.click()
.end()
.get('[data-test-subj="Split Action"]')
.click()
.end()
// Target Index Name is required
.get('[data-test-subj="targetIndexNameInput"]')
.type(`${targetIndex}`)
.end()
// Number of shards after split is required
.get('[data-test-subj="numberOfShardsInput"]')
.type(`${splitNumber}{downArrow}{enter}`)
.end()
.get('[data-test-subj="numberOfReplicasInput"]')
.clear()
.type(`${replicaNumber}`)
.end()
.get('[data-test-subj="splitButton"]')
.click()
.end();

cy.get(`[data-test-subj="viewIndexDetailButton-${targetIndex}"]`).click().end();
cy.get("#indexDetailModalSettings").click().end();
cy.get('[data-test-subj="form-name-index.number_of_shards"] .euiText').should("have.text", `${splitNumber}`).end();
cy.get('[data-test-subj="form-name-index.number_of_replicas"] .euiText').should("have.text", `${replicaNumber}`).end();
}); // Split

it("Split successfully with advanced setting", () => {
const targetIndex = `${sampleIndex}` + "-setting";
cy.get(`[data-test-subj="checkboxSelectRow-${sampleIndex}"]`)
.click()
.end()
.get('[data-test-subj="moreAction"]')
.click()
.end()
.get('[data-test-subj="Split Action"]')
.click()
.end()
.get("[data-test-subj=targetIndexNameInput]")
.type(`${targetIndex}`)
.end()
// Instead of input shard number at shard field, another option is to populate it in advanced setting
.get('[aria-controls="accordionForCreateIndexSettings"]')
.click()
.end()
.get('[data-test-subj="codeEditorContainer"] textarea')
.focus()
// Need to remove the default {} in advanced setting
.clear()
.type(`{"index.number_of_shards": "${splitNumber}", "index.number_of_replicas": "${replicaNumber}"}`, {
parseSpecialCharSequences: false,
})
.end()
.get('[data-test-subj="splitButton"]')
.click()
.end();

cy.get(`[data-test-subj="viewIndexDetailButton-${targetIndex}"]`).click().end();
cy.get("#indexDetailModalSettings").click().end();
cy.get('[data-test-subj="form-name-index.number_of_shards"] .euiText').should("have.text", `${splitNumber}`).end();
cy.get('[data-test-subj="form-name-index.number_of_replicas"] .euiText').should("have.text", `${replicaNumber}`).end();
}); // advanced setting

it("Split successfully with alias", () => {
const targetIndex = `${sampleIndex}` + "-alias";
const newAlias = "alias-new";
cy.get(`[data-test-subj="checkboxSelectRow-${sampleIndex}"]`)
.click()
.end()
.get('[data-test-subj="moreAction"]')
.click()
.end()
.get('[data-test-subj="Split Action"]')
.click()
.end()
.get("[data-test-subj=targetIndexNameInput]")
.type(`${targetIndex}`)
.end()
.get('[data-test-subj="numberOfShardsInput"]')
.type(`${splitNumber}{downArrow}{enter}`)
.end()
// Assign to an existing alias and a new alias
.get('[data-test-subj="form-name-aliases"] [data-test-subj="comboBoxSearchInput"]')
.type(`${sampleAlias}{enter}${newAlias}{enter}`)
.end()
.get('[data-test-subj="splitButton"]')
.click()
.end();

cy.get(`[data-test-subj="viewIndexDetailButton-${targetIndex}"]`).click().end();
// Verify alias associated with the new index
cy.get("#indexDetailModalAlias").click().end();
cy.get(`[title="${newAlias}"]`).should("exist").end();
cy.get(`[title="${sampleAlias}"]`).should("exist").end();
}); // Create with alias

it("Update blocks write to true", () => {
// Set index to not blocks write
cy.updateIndexSettings(sampleIndex, { "index.blocks.write": "false" }).end();
cy.get(`[data-test-subj="checkboxSelectRow-${sampleIndex}"]`)
.click()
.end()
.get('[data-test-subj="moreAction"]')
.click()
.end()
.get('[data-test-subj="Split Action"]')
.click()
.end()
// Index can't be split if it's blocks write status is not true
.get('[data-test-subj="splitButton"]')
.should("have.class", "euiButton-isDisabled")
.end()
.wait(1000)
// Set index to blocks write
.get('[data-test-subj="set-indexsetting-button"]')
.click()
.end()
.get('[data-test-subj="splitButton"]')
.click()
.end();
}); // Blocks write
});
});
10 changes: 4 additions & 6 deletions public/JobHandler/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ export function JobHandlerRegister(core: CoreSetup) {
{
title: ((
<>
Source index <DetailLink index={extras.sourceIndex} /> has been successfully reindexed as{" "}
<DetailLink index={extras.destIndex} />
Source {extras.sourceIndex} has been successfully reindexed as <DetailLink index={extras.destIndex} />
</>
) as unknown) as string,
},
Expand Down Expand Up @@ -113,8 +112,7 @@ export function JobHandlerRegister(core: CoreSetup) {
{
title: ((
<>
Reindex from <DetailLink index={extras.sourceIndex} /> to {extras.destIndex} has some errors, please check the errors
below:
Reindex from {extras.sourceIndex} to {extras.destIndex} has some errors, please check the errors below:
</>
) as unknown) as string,
text: ((<div style={{ maxHeight: "30vh", overflowY: "auto" }}>{errors}</div>) as unknown) as string,
Expand All @@ -139,8 +137,8 @@ export function JobHandlerRegister(core: CoreSetup) {
{
title: ((
<>
Reindex from <DetailLink index={extras.sourceIndex} /> to {extras.destIndex} does not finish in reasonable time, please check
the task {extras.taskId} manually
Reindex from {extras.sourceIndex} to {extras.destIndex} does not finish in reasonable time, please check the task{" "}
{extras.taskId} manually
</>
) as unknown) as string,
},
Expand Down
6 changes: 3 additions & 3 deletions public/components/FormGenerator/built_in_components/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ const componentMap: Record<ComponentMapEnum, React.ComponentType<IFieldComponent
forwardRef(({ onChange, value, options, ...others }, ref: React.Ref<any>) => {
return (
<EuiComboBox
{...others}
options={options}
onCreateOption={(searchValue) => {
const findItem = options.find((item: { label: string }) => item.label === searchValue);
if (findItem) {
onChange(searchValue);
}
}}
{...others}
options={options}
singleSelection={{ asPlainText: true }}
ref={ref}
onChange={(selectedOptions) => {
Expand All @@ -59,7 +59,7 @@ const componentMap: Record<ComponentMapEnum, React.ComponentType<IFieldComponent
onChange(undefined);
}
}}
selectedOptions={[value].filter((item) => item !== undefined).map((label) => ({ label }))}
selectedOptions={[value].filter((item) => item !== undefined).map((label) => ({ label: `${label}` }))}
/>
);
})
Expand Down
10 changes: 6 additions & 4 deletions public/components/FormGenerator/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,12 @@ function FormGenerator<T>(props: IFormGeneratorProps<T>, ref: React.Ref<IFormGen
},
}));
useEffect(() => {
if (propsRef.current.resetValuesWhenPropsValueChange) {
field.resetValues(props.value);
} else {
field.setValues(props.value);
if (!isEqual(field.getValues(), props.value)) {
if (propsRef.current.resetValuesWhenPropsValueChange) {
field.resetValues(props.value);
} else {
field.setValues(props.value);
}
}
}, [props.value]);
const formattedFormFields = useMemo(() => {
Expand Down
2 changes: 1 addition & 1 deletion public/components/JSONDiffEditor/JSONDiffEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ const JSONDiffEditor = forwardRef(({ value, onChange, ...others }: JSONDiffEdito
editorRef.current?.getModifiedEditor().getDomNode()?.setAttribute("data-test-subj", "codeEditorContainer");
return () => {
document.body.removeEventListener("click", onClickOutsideHandler.current);
editorRef.current?.getDomNode().addEventListener("click", onClickContainer.current);
editorRef.current?.getDomNode().removeEventListener("click", onClickContainer.current);
};
}, [isReady]);

Expand Down
Loading

0 comments on commit 9517d4a

Please sign in to comment.