Skip to content
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

fix(buildcop): fix parsing CDATA from Java errors #873

Merged
merged 1 commit into from
Aug 19, 2020
Merged
Show file tree
Hide file tree
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
10 changes: 10 additions & 0 deletions packages/buildcop/__snapshots__/buildcop.js
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,13 @@ exports['buildcop app xunitXML opens an issue [Python error] 1'] = {
"buildcop: issue"
]
}

exports['buildcop app xunitXML opens an issue 2 [Java] 1'] = {
"title": "com.example.datastore.QuickstartSampleIT: testQuickstart failed",
"body": "This test failed!\n\nTo configure my behavior, see [the Build Cop Bot documentation](https://github.com/googleapis/repo-automation-bots/tree/master/packages/buildcop).\n\nIf I'm commenting on this issue too often, add the `buildcop: quiet` label and\nI will stop commenting.\n\n---\n\ncommit: 123\nbuildURL: http://example.com\nstatus: failed\n<details><summary>Test output</summary><br><pre>com.google.cloud.datastore.DatastoreException: The project java-docs-samples-testing does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=java-docs-samples-testing to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled.\n\tat com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:138)\n\tat com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.commit(HttpDatastoreRpc.java:164)\n\tat com.google.cloud.datastore.DatastoreImpl$5.call(DatastoreImpl.java:564)\n\tat com.google.cloud.datastore.DatastoreImpl$5.call(DatastoreImpl.java:561)\n\tat com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)\n\tat com.google.cloud.RetryHelper.run(RetryHelper.java:76)\n\tat com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)\n\tat com.google.cloud.datastore.DatastoreImpl.commit(DatastoreImpl.java:560)\n\tat com.google.cloud.datastore.DatastoreImpl.commitMutation(DatastoreImpl.java:553)\n\tat com.google.cloud.datastore.DatastoreImpl.delete(DatastoreImpl.java:538)\n\tat com.example.datastore.QuickstartSampleIT.deleteTestEntity(QuickstartSampleIT.java:46)\n\tat com.example.datastore.QuickstartSampleIT.setUp(QuickstartSampleIT.java:51)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\n\tat org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)\n\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)\n\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)\n\tat org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)\n\tat org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:377)\n\tat org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:138)\n\tat org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:465)\n\tat org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:451)\nCaused by: com.google.datastore.v1.client.DatastoreException: The project java-docs-samples-testing does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=java-docs-samples-testing to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled., code=NOT_FOUND\n\tat com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:136)\n\tat com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:185)\n\tat com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:96)\n\tat com.google.datastore.v1.client.Datastore.commit(Datastore.java:87)\n\tat com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.commit(HttpDatastoreRpc.java:162)\n\t... 40 more\n</pre></details>",
"labels": [
"type: bug",
"priority: p1",
"buildcop: issue"
]
}
14 changes: 5 additions & 9 deletions packages/buildcop/src/buildcop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -829,22 +829,18 @@ buildcop.findTestResults = (xml: string): TestResults => {
if (testcase['skipped'] !== undefined) {
continue;
}
const failure = testcase['failure'];
const error = testcase['error'];
if (failure === undefined && error === undefined) {
// Treat errors and failures the same way.
const failure = testcase['failure'] || testcase['error'];
if (failure === undefined) {
passes.push({
package: pkg,
testCase: testcase['_attributes'].name,
passed: true,
});
continue;
}
// Here we must have a failure or an error.
let log = failure === undefined ? error['_text'] : failure['_text'];
// Java puts its test logs in a CDATA element.
if (log === undefined) {
log = failure['_cdata'];
}
// Java puts its test logs in a CDATA element; other languages use _text.
const log = failure['_text'] || failure['_cdata'] || '';
failures.push({
package: pkg,
testCase: testcase['_attributes'].name,
Expand Down
13 changes: 13 additions & 0 deletions packages/buildcop/test/buildcop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,19 @@ describe('buildcop', () => {
scopes.forEach(s => s.done());
});

it('opens an issue 2 [Java]', async () => {
const payload = buildPayload('java_one_error.xml', 'java-datastore');

const scopes = [
nockIssues('java-datastore'),
nockNewIssue('java-datastore'),
];

await probot.receive({name: 'pubsub.message', payload, id: 'abc123'});

scopes.forEach(s => s.done());
});

it('opens an issue [Node.js]', async () => {
const payload = buildPayload('node_one_failed.xml', 'nodejs-spanner');

Expand Down
56 changes: 56 additions & 0 deletions packages/buildcop/test/fixtures/testdata/java_one_error.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-failsafe-plugin/xsd/failsafe-test-report-3.0.xsd" version="3.0" name="com.example.datastore.QuickstartSampleIT(sponge_log)" time="1.83" tests="2" errors="2" skipped="0" failures="0">
<testcase name="testQuickstart" classname="com.example.datastore.QuickstartSampleIT(sponge_log)" time="1.707">
<error message="The project java-docs-samples-testing does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=java-docs-samples-testing to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled." type="com.google.cloud.datastore.DatastoreException"><![CDATA[com.google.cloud.datastore.DatastoreException: The project java-docs-samples-testing does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=java-docs-samples-testing to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled.
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:138)
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.commit(HttpDatastoreRpc.java:164)
at com.google.cloud.datastore.DatastoreImpl$5.call(DatastoreImpl.java:564)
at com.google.cloud.datastore.DatastoreImpl$5.call(DatastoreImpl.java:561)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
at com.google.cloud.datastore.DatastoreImpl.commit(DatastoreImpl.java:560)
at com.google.cloud.datastore.DatastoreImpl.commitMutation(DatastoreImpl.java:553)
at com.google.cloud.datastore.DatastoreImpl.delete(DatastoreImpl.java:538)
at com.example.datastore.QuickstartSampleIT.deleteTestEntity(QuickstartSampleIT.java:46)
at com.example.datastore.QuickstartSampleIT.setUp(QuickstartSampleIT.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:377)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:138)
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:465)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:451)
Caused by: com.google.datastore.v1.client.DatastoreException: The project java-docs-samples-testing does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=java-docs-samples-testing to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled., code=NOT_FOUND
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:136)
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:185)
at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:96)
at com.google.datastore.v1.client.Datastore.commit(Datastore.java:87)
at com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.commit(HttpDatastoreRpc.java:162)
... 40 more
]]></error>
</testcase>
</testsuite>