Skip to content

Rework the tests to remove flakiness (hopefully) #1488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 25, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@

import com.google.cloud.dialogflow.v2beta1.DeleteDocumentRequest;
import com.google.cloud.dialogflow.v2beta1.Document;
import com.google.cloud.dialogflow.v2beta1.DocumentName;
import com.google.cloud.dialogflow.v2beta1.DocumentsClient;
import com.google.cloud.dialogflow.v2beta1.KnowledgeAnswers;
import com.google.cloud.dialogflow.v2beta1.KnowledgeAnswers.Answer;
import com.google.cloud.dialogflow.v2beta1.KnowledgeBase;
import com.google.cloud.dialogflow.v2beta1.KnowledgeBaseName;
import com.google.cloud.dialogflow.v2beta1.KnowledgeBasesClient;
import com.google.cloud.dialogflow.v2beta1.ProjectName;

import com.google.common.collect.ImmutableList;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
Expand All @@ -48,6 +49,8 @@
public class KnowledgeBaseManagementIT {

private static String PROJECT_ID = System.getenv().get("GOOGLE_CLOUD_PROJECT");
private static String TEST_KNOWLEDGE_BASE_ID = "NjcyODA2NTU4MTk4OTIzMjY0MA";
private static String TEST_DOCUMENT_ID = "NjY2NDk4ODc5ODkyNjk3OTA3Mg";
private static String SESSION_ID = "fake_session_for_testing";
private static String LANGUAGE_CODE = "en-US";
private static String KNOWLEDGE_BASE_NAME = "fake_knowledge_base_name";
Expand All @@ -71,13 +74,19 @@ public void tearDown() throws Exception {
ProjectName projectName = ProjectName.of(PROJECT_ID);
for (KnowledgeBase knowledgeBase :
knowledgeBasesClient.listKnowledgeBases(projectName).iterateAll()) {
// Delete any documents in the knowledge base.
for (Document document : documentsClient.listDocuments(
knowledgeBase.getName()).iterateAll()) {
documentsClient.deleteDocumentCallable().call(
DeleteDocumentRequest.newBuilder().setName(document.getName()).build());
// DO NOT DELETE THE TEST KNOWLEDGE BASE
if (!knowledgeBase.getName().contains(TEST_KNOWLEDGE_BASE_ID)) {
// Delete any documents in the knowledge base.
for (Document document : documentsClient.listDocuments(
knowledgeBase.getName()).iterateAll()) {
// DO NOT DELETE THE TEST DOCUMENT
if (!document.getName().contains(TEST_DOCUMENT_ID)) {
documentsClient.deleteDocumentCallable().call(
DeleteDocumentRequest.newBuilder().setName(document.getName()).build());
}
}
knowledgeBasesClient.deleteKnowledgeBase(knowledgeBase.getName());
}
knowledgeBasesClient.deleteKnowledgeBase(knowledgeBase.getName());
}
}
}
Expand All @@ -88,7 +97,7 @@ public void tearDown() throws Exception {
public void testKnowledgeBase() throws Exception {
// Check the knowledge base does not yet exist
List<KnowledgeBase> knowledgeBases = KnowledgeBaseManagement.listKnowledgeBases(PROJECT_ID);
assertEquals(0, knowledgeBases.size());
assertEquals(1, knowledgeBases.size());

// Create a Knowledge Base
KnowledgeBase knowledgeBase =
Expand All @@ -101,15 +110,22 @@ public void testKnowledgeBase() throws Exception {

// List Knowledge Bases
knowledgeBases = KnowledgeBaseManagement.listKnowledgeBases(PROJECT_ID);
assertEquals(1, knowledgeBases.size());
assertEquals(KNOWLEDGE_BASE_NAME, knowledgeBases.get(0).getDisplayName());
assertEquals(2, knowledgeBases.size());

int found = 0;
for (KnowledgeBase knowledgeBase1 : knowledgeBases) {
if (knowledgeBase1.getDisplayName().equals(KNOWLEDGE_BASE_NAME)) {
found += 1;
}
}
assertEquals(1, found);

// Delete the Knowledge Base
KnowledgeBaseManagement.deleteKnowledgeBase(knowledgeBase.getName());

// List Knowledge Bases (ensure delete success)
knowledgeBases = KnowledgeBaseManagement.listKnowledgeBases(PROJECT_ID);
assertEquals(0, knowledgeBases.size());
assertEquals(1, knowledgeBases.size());
}

@Test
Expand Down Expand Up @@ -147,29 +163,25 @@ public void testDocumentManagement() throws Exception {

@Test
public void testDetectIntentKnowledge() throws Exception {
// Create a Knowledge Base
KnowledgeBase knowledgeBase =
KnowledgeBaseManagement.createKnowledgeBase(PROJECT_ID, KNOWLEDGE_BASE_NAME);
String knowledgeBaseName = knowledgeBase.getName();
KnowledgeBaseName knowledgeBaseName = KnowledgeBaseName.newBuilder()
.setProject(PROJECT_ID).setKnowledgeBase(TEST_KNOWLEDGE_BASE_ID).build();

// Create a Document - one needs to exist in order for detectIntentKnowledge to provide answers.
Document document = DocumentManagement.createDocument(
knowledgeBaseName,
DOCUMENT_BASE_NAME,
"text/html",
"FAQ",
"https://cloud.google.com/storage/docs/faq");
assertEquals(DOCUMENT_BASE_NAME, document.getDisplayName());
DocumentName documentName = DocumentName.newBuilder()
.setProject(PROJECT_ID)
.setKnowledgeBase(TEST_KNOWLEDGE_BASE_ID)
.setDocument(TEST_DOCUMENT_ID)
.build();

Map<String, KnowledgeAnswers> allAnswers = DetectIntentKnowledge
.detectIntentKnowledge(PROJECT_ID, knowledgeBaseName, SESSION_ID, LANGUAGE_CODE, TEXTS);
Map<String, KnowledgeAnswers> allAnswers = DetectIntentKnowledge.detectIntentKnowledge(
PROJECT_ID, knowledgeBaseName.toString(), SESSION_ID, LANGUAGE_CODE, TEXTS);
assertEquals(TEXTS.size(), allAnswers.size());
int answersFound = 0;
for (String text : TEXTS) {
KnowledgeAnswers knowledgeAnswers = allAnswers.get(text);
if (knowledgeAnswers.getAnswersCount() > 0) {
Answer answer = knowledgeAnswers.getAnswers(0);
if (text.equals(answer.getFaqQuestion()) && document.getName().equals(answer.getSource())) {
if (text.equals(answer.getFaqQuestion())
&& documentName.toString().equals(answer.getSource())) {
answersFound++;
}
}
Expand Down