1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: EPICS in Docker image Build Error base-3.15.6 (alpine linux) |
From: | Josh Fiddler via Tech-talk <tech-talk at aps.anl.gov> |
To: | tech-talk at aps.anl.gov |
Date: | Thu, 22 Apr 2021 17:46:41 -0400 |
Hi Josh,
On Apr 22, 2021, at 4:06 PM, Josh Fiddler via Tech-talk <tech-talk at aps.anl.gov> wrote:
>
> I managed to compile EPICS 7.0.5 within the MDSplus Alapine container and ran `make runtests`. Only two tests Failed
> ###### Begin Error Output ######
> /Test Summary Report
> -------------------
> epicsTimeZoneTest.t (Wstat: 256 Tests: 160 Failed: 4)
> Failed tests: 84, 90, 104, 110
> Non-zero exit status: 1
> epicsThreadTest.t (Wstat: 256 Tests: 15 Failed: 2)
> Failed tests: 3, 5
> Non-zero exit status: 1
> Files=48, Tests=4285, 211 wallclock secs ( 0.49 usr 0.07 sys + 1.42 cusr 0.72 csys = 2.70 CPU)
> Result: FAIL
> ###### End Error Output ######
>
> Are the test cases published?
The code for those two test programs can be found in the modules/libcom/test directory. You can run the compiled test programs by hand, they generate human-readable output in a standard format called TAP (Test Anything Protocol) which is supported by Perl’s test harness. To run them:
> woz$ cd modules/libcom/test/O.linux-x86_64
> woz$ ./epicsTimeZoneTest
> 1..160
> # POSIX 1445259616
> # TZ = "EST5EDT"
> # test_localtime(1445259616, ...)
> ok 1 - epicsTime_localtime() success
> ok 2 - sec 16==16
> ok 3 - min 0==0
> ok 4 - hour 9==9
> ok 5 - mday 19==19
> ok 6 - mon 9==9
> ok 7 - year 2015==2015
> ok 8 - wday 1==1
> ok 9 - yday 291==291
> ok 10 - isdst 1==1
> # test_gmtime(1445259616, ...)
> ...
> # POSIX 1421244931
> # TZ = "EST5EDT"
> # test_localtime(1421244931, ...)
> ok 81 - epicsTime_localtime() success
> ok 82 - sec 31==31
> ok 83 - min 15==15
> ok 84 - hour 9==9
> ok 85 - mday 14==14
> ok 86 - mon 0==0
> ok 87 - year 2015==2015
> ok 88 - wday 3==3
> ok 89 - yday 13==13
> ok 90 - isdst 0==0
> ...
> # TZ = "CST6CDT"
> # test_localtime(1421244931, ...)
> ok 101 - epicsTime_localtime() success
> ok 102 - sec 31==31
> ok 103 - min 15==15
> ok 104 - hour 8==8
> ok 105 - mday 14==14
> ok 106 - mon 0==0
> ok 107 - year 2015==2015
> ok 108 - wday 3==3
> ok 109 - yday 13==13
> ok 110 - isdst 0==0
> ...
> ok 157 - year 2015==2015
> ok 158 - wday 3==3
> ok 159 - yday 13==13
> ok 160 - isdst 0==0
>
> Results
> =======
> Tests: 160
> Passed: 160 = 100.00%
> woz$ ./epicsThreadTest
> 1..15
> # System has 4 CPUs
> ok 1 - ncpus > 0
> # main() thread 0x7fc39bd001e0
> ok 2 - Join delayed parent (2.00108 seconds)
> ok 3 - Join tests #1 completed
> ok 4 - Join delayed parent (2.00075 seconds)
> ok 5 - Join tests #2 completed
> ok 6 - pget == pset
> ok 7 - thread.getPriority() == epicsThreadGetPriority(self)
> ok 8 - pget == pset
> ok 9 - thread.getPriority() == epicsThreadGetPriority(self)
> ok 10 - pget == pset
> ok 11 - thread.getPriority() == epicsThreadGetPriority(self)
> ok 12 - threadB epicsThreadIsOkToBlock() = 1
> ok 13 - threadA epicsThreadIsOkToBlock() = 0
> ok 14 - infoB.didSomething
> ok 15 - infoA.didSomething
>
> Results
> =======
> Tests: 15
> Passed: 15 = 100.00%
From the test failures you reported it looks like the musl C library that comes with Alpine Linux may have problems with its DST calculations (tests 84, 90, 104 and 110 in the first program) for the year 2015 at least, and its pthread_join() routine might not be working (tests 3 and 5 in the second program). The first issue you can probably ignore, but the pthread_join() might be more of a problem and is something that you should check since the IOC code does now use it.
- Andrew
--
Complexity comes for free, simplicity you have to work for.