unclebob / fitnesse

FitNesse -- The Acceptance Test Wiki
fitnesse.org
Other
2.05k stars 715 forks source link

Ant build fails #809

Closed MMatten closed 9 years ago

MMatten commented 9 years ago

Cloning the repo, checkint out master, and running ant produces a failed build.

I'm running Oracle JDK 8, ant 1.9.4, on Windows 7 (ultimate).

From experience, is this likely to be environmental?

I can see a few errors in the test outputs such as: -

[junit] <span class="error">Could not complete testing: fitnesse.slim.SlimError: Got invalid slim header from client. Read the following: </span>

junit.framework.AssertionFailedError: The regexp <<td><span class="pass">wow</span></td>> was not found in: HTTP/1.1 200

hansjoachim commented 9 years ago

Thanks for reporting.

I am not able to reproduce this issue here. I should probably note that I'm using openJDK8 on Ubuntu, but I've successfully built FitNesse locally a couple of times today.

The continuous integration build seems to work fine as well (https://cleancoder.ci.cloudbees.com/job/fitnesse/), though I don't know the details on what it builds with.

Could you attach a larger part of the build output? Are there specific tests failing, or do you see random failures?

MMatten commented 9 years ago

It's bombing at this point: -

[junit] Testcase: setSymbolUTF8 took 0 sec
[junit]     FAILED
[junit] expected:<[{id='scriptTable_id_0', instruction='callAndAssign', symbolName='├å├ÿ├à',instanceName='scriptTableActor', methodName='function', args=[arg]}]> but was:<[{id='scriptTable_id_0', instruction='call', instanceName='scriptTableActor', methodName='├├├Arg', args=[function]}]>
[junit] junit.framework.AssertionFailedError: expected:<[{id='scriptTable_id_0', instruction='callAndAssign', symbolName='├å├ÿ├à', instanceName='scriptTableActor', methodName='function', args=[arg]}]> but was:<[{id='scriptTable_id_0', instruction='call', instanceName='scriptTableActor', methodName='├├├Arg', args=[function]}]>
[junit]     at fitnesse.testsystems.slim.tables.ScriptTableTest.setSymbolUTF8(ScriptTableTest.java:425)

Any ideas from that?

MMatten commented 9 years ago

After a safe-mode (with network support) boot I've tried again.

The acceptance_tests target builds OK.

The unit_tests target fails, although it's not obvious why. I can see some stack traces in the output and some stderr messages captured and included in the output. E.g.

[junit] ------------- Standard Error -----------------
[junit] Can not bind to port 10258. Aborting.
[junit] java.net.BindException: Address already in use: JVM_Bind
[junit]     at java.net.DualStackPlainSocketImpl.bind0(Native Method)

But I can't see any Failures or Errors in the summary lines.

six42 commented 9 years ago

Hi Mark

Another application is blocking/using the port 10258. Thats why you see the error "can not bind" in the slim client. The Test system can connect to the port. But talks there to the other application. And this other application obviously never sends a slim header. That explains the error in the test system.

Check what is using this port and kill it then rerun the build.

six42 commented 9 years ago

Oh, just seeing this error.

I had this problem as well under windows. the utf8 characters in this test (symbolName='ÆØÅ' )are wrong under windows. This test was introduced by #791. You can see there how it should look. PR #779 works again under windows and should fix this.

Either merge #779 or delete this test to finish your build.

MMatten commented 9 years ago

@six42 - thanks for the replies. I did look for something using 10258 (netstat -ano) but could find nothing.

But the test exec summaries don't show any failure or error count > 0. Does the presence of any stderr output also mean the build will fail?

amolenaar commented 9 years ago

@hansjoachim made a few remarks on #779. I can merge the PR and the issues can be fixed later. At least that fixes the windows build...

MMatten commented 9 years ago

779 has a complex discussion attached to it. Will this actually be merged?

amolenaar commented 9 years ago

I check #779 on my Mac, but it does not compile (encoding issue). I think this issue might be fixed by tells the java compiler that all files are encoded as UTF-8.

six42 commented 9 years ago

Hi Arjan, Can you delete the junit test 'setSymbolUTF8' and confirm that afterwards the build is working on Mac.

I propose to delete this junit test in this case. The same utf8 functionality is tested also in: FitNesse/SuiteAcceptanceTests/SuiteSlimTests/SlimSymbols/NamingConvention

if you want to keep the junit then I assume you are right and we have to tell the java compiler that all files are utf8. But I don't know how this is done. And I would assume also my editor must know this.

amolenaar commented 9 years ago

I did just merge #779. I removed the test case as you proposed. The code is indeed well tested via acceptance tests. Now it builds on my Windows VM at least.

six42 commented 9 years ago

Thanks

amolenaar commented 9 years ago

Did the above commit fix the build?

MMatten commented 9 years ago

Apologies. I'll give it a go this weekend and report back.

MMatten commented 9 years ago

Apologies for the delay. I've had a chance to look again:

[junit] ------------- Standard Error -----------------
[junit] Nov 08, 2015 7:24:21 PM fitnesse.FitNesse start
[junit] SEVERE: FitNesse cannot be started...
[junit] Nov 08, 2015 7:24:21 PM fitnesse.FitNesse start
[junit] SEVERE: Port 80 is already in use.
[junit] Nov 08, 2015 7:24:21 PM fitnesse.FitNesse start
[junit] SEVERE: Use the -p <port#> command line argument to use a different port.
[junit] root page: fitnesse.wiki.fs.FileSystemPage at .\testFitnesseRoot#latest
[junit] logger: none
[junit] authenticator: fitnesse.authentication.PromiscuousAuthenticator
[junit] page factory: fitnesse.html.template.PageFactory
[junit] page theme: bootstrap
[junit] Starting FitNesse on port: 80
[junit] Executing command: command
[junit] root page: fitnesse.wiki.fs.FileSystemPage at .\FitNesseRoot#latest
[junit] logger: none
[junit] authenticator: fitnesse.authentication.OneUserAuthenticator
[junit] page factory: fitnesse.html.template.PageFactory
[junit] page theme: bootstrap
[junit] Starting FitNesse on port: 9123
[junit] Executing command: user:pwd:/FitNesse.NonExistentTestCase?test
[junit] root page: fitnesse.wiki.fs.FileSystemPage at .\testFitnesseRoot#latest
[junit] logger: none
[junit] authenticator: fitnesse.authentication.PromiscuousAuthenticator
[junit] page factory: fitnesse.html.template.PageFactory
[junit] page theme: bootstrap
[junit] Starting FitNesse on port: 80
[junit] ------------- ---------------- ---------------
[junit]
[junit] Testcase: testDirCreations took 0.014 sec
[junit] Testcase: commandArgCallsExecuteSingleCommand took 0.282 sec
[junit] Testcase: canRunSingleCommandWithAuthentication took 0.134 sec
[junit] Testcase: canRunSingleCommand took 0.227 sec
[junit]     FAILED
[junit]
[junit] Expected: a string containing "Command Output"
[junit]      but: was "root page: fitnesse.wiki.fs.FileSystemPage at .\FitNesseRoot#latest
[junit] logger: none
[junit] authenticator: fitnesse.authentication.PromiscuousAuthenticator
[junit] page factory: fitnesse.html.template.PageFactory
[junit] page theme: bootstrap
[junit] Starting FitNesse on port: 9123
[junit] Executing command: /root
[junit] "
[junit] junit.framework.AssertionFailedError:
[junit] Expected: a string containing "Command Output"
[junit]      but: was "root page: fitnesse.wiki.fs.FileSystemPage at .\FitNesseRoot#latest
[junit] logger: none
[junit] authenticator: fitnesse.authentication.PromiscuousAuthenticator
[junit] page factory: fitnesse.html.template.PageFactory
[junit] page theme: bootstrap
[junit] Starting FitNesse on port: 9123
[junit] Executing command: /root
[junit] "
[junit]     at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
[junit]     at fitnesseMain.FitNesseMainTest.canRunSingleCommand(FitNesseMainTest.java:106)
[junit]
[junit] Testcase: systemPropertiesTakePrecedenceOverConfiguredProperties took 0.065 sec
[junit] Testcase: runningCommandWithNonExistentAddressResultsInError took 0.031 sec
[junit] Testcase: testInstallOnly took 0.01 sec
[junit] Testcase: testIsRunning took 0.695 sec

BUILD FAILED

For the life of me, I can't work out what's using port 80. Is there a way of telling the unit tests to start FitNesse on a different port?

amolenaar commented 9 years ago

The problem is not with the port (this is a bit of excessive logging).

I left in a unit test eror in my latest change, which I fixed now.

MMatten commented 9 years ago

Awesome. All working now.

Thanks guys.

(What are the formalities here? Who closes the issue?!)

amolenaar commented 9 years ago

No formalities here. First to hit the close button wins :)