Hello again,

Upon further investigation, I found that the only reason for the tests
running properly was that I had an installed copy of gnuradio, which
was providing the necessary dlls for the test run to succeed.  When I
removed the installed gnuradio, all the testcases failed. :(  It turns
out there were two problems.  The first was that none of the gnuradio
dlls were in the path when the test case was run.  The path in windows
provides the equivalent function of the LD_LIBRARY_PATH in linux, so
without the dlls in the path none of the programs built could load.
The second problem was that python will not load dlls from a path
other than the system python directory without a call to
os.add_dll_directory, passing it the directory containing the
gr_python .pyd library (the windows equivalent of the gr_python*.so
file).  I was able to hack together a find call to find all the test
cases and a sed regex to add the call to os.add_dll_directory to the
test cases.  Now they run properly even without an installed copy of
gnuradio. :)

Thanks again to Marcus for his time on this.

Best regards,

Chris

On Tue, Feb 25, 2025 at 1:14 PM Chris Gorman <chrisjohgor...@gmail.com> wrote:
>
> Hi Marcus,
>
> Thanks for your time.
>
> The output is as follows ...
>
> $ ctest.exe -R mute --output-on-failure
> Test project 
> C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>     Start 72: qa_mute
> 1/1 Test #72: qa_mute ..........................   Passed    0.50 sec
>
> 100% tests passed, 0 tests failed out of 1
>
> Total Test time (real) =   0.64 sec
>
> $ ctest.exe -R interleaver --output-on-failure
> Test project 
> C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>     Start  40: qa_blockinterleaver_xx
> 1/4 Test  #40: qa_blockinterleaver_xx ...........   Passed    0.80 sec
>     Start  62: qa_matrix_interleaver
> 2/4 Test  #62: qa_matrix_interleaver ............   Passed    0.43 sec
>     Start  77: qa_patterned_interleaver
> 3/4 Test  #77: qa_patterned_interleaver .........   Passed    0.41 sec
>     Start 241: qa_interleaver
> 4/4 Test #241: qa_interleaver ...................   Passed    0.36 sec
>
> 100% tests passed, 0 tests failed out of 4
>
> Total Test time (real) =   2.18 sec
>
> $ ctest.exe -R wavfile --output-on-failure
> Test project 
> C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/build-MINGW64
>     Start 112: qa_wavfile
> 1/1 Test #112: qa_wavfile .......................   Passed    0.82 sec
>
> 100% tests passed, 0 tests failed out of 1
>
> Total Test time (real) =   0.97 sec
>
> I can run all the tests by hand with ctest --output-on-failure and
> they all pass.  When I run them from the package build script, using
> the same command, I get the following errors.
>
> 72/268 Test  #72: qa_mute
> ......................................***Timeout  90.03 sec
> .thread_body_wrapper :error: ERROR thread[thread-per-block[1]: <block
> mute(7)>]: pmt_to_bool: wrong_type (() . #t)
>
> <---snip--->
>
> 112/268 Test #112: qa_wavfile
> ...................................***Failed    0.88 sec
> ...wavfile_sink :error: sf_open(1) failed: no_file.wav: Error : major
> format is 0.
> .Fss...
> ======================================================================
> FAIL: test_004_automatic_reopen_after_stop
> (__main__.test_wavefile.test_004_automatic_reopen_after_stop)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File 
> "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-blocks/python/blocks/qa_wavfile.py",
> line 203, in test_004_automatic_reopen_after_stop
>     self.assertEqual(out_params, expected_params)
> AssertionError: _wave[41 chars]te=8000, nframes=4, comptype='NONE',
> compname='not compressed') != _wave[41 chars]te=8000, nframes=8,
> comptype='NONE', compname='not compressed')
>
> ----------------------------------------------------------------------
> Ran 10 tests in 0.414s
>
> FAILED (failures=1, skipped=2)
>
> <---snip--->
>
> 241/268 Test #241: qa_interleaver
> ...............................***Failed    0.41 sec
> EEE
> ======================================================================
> ERROR: test_001_explicit_interleaver_vector_with_length
> (__main__.test_interleaver.test_001_explicit_interleaver_vector_with_length)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File 
> "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
> line 29, in test_001_explicit_interleaver_vector_with_length
>     self.assertEqual((k, interl, de_in), (i.k(),
> i.interleaver_indices(), i.deinterleaver_indices()))
>                                           ^^^
> AttributeError: 'gnuradio.trellis.trellis_python.interleaver' object
> has no attribute 'k'
>
> ======================================================================
> ERROR: test_002_explicit_interleaver_vector
> (__main__.test_interleaver.test_002_explicit_interleaver_vector)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File 
> "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
> line 34, in test_002_explicit_interleaver_vector
>     i = trellis.interleaver(interl)
>         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: __init__(): incompatible constructor arguments. The
> following argument types are supported:
>     1. gnuradio.trellis.trellis_python.interleaver()
>     2. gnuradio.trellis.trellis_python.interleaver(INTERLEAVER:
> gnuradio.trellis.trellis_python.interleaver)
>     3. gnuradio.trellis.trellis_python.interleaver(K: int, INTER: list[int])
>     4. gnuradio.trellis.trellis_python.interleaver(name: str)
>     5. gnuradio.trellis.trellis_python.interleaver(K: int, seed: int)
>
> Invoked with: [1, 2, 3, 4, 0]
>
> ======================================================================
> ERROR: test_002_random (__main__.test_interleaver.test_002_random)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File 
> "C:/msys64/home/chris/src/MINGW-packages/mingw-w64-gnuradio/src/gnuradio-3.10.12.0/gr-trellis/python/trellis/qa_interleaver.py",
> line 41, in test_002_random
>     self.assertSequenceEqual(sorted(i.interleaver_indices()), range(k))
>                                     ^^^^^^^^^^^^^^^^^^^^^
> AttributeError: 'gnuradio.trellis.trellis_python.interleaver' object
> has no attribute 'interleaver_indices'
>
> ----------------------------------------------------------------------
> Ran 3 tests in 0.006s
>
> FAILED (errors=3)
>
> Not sure what is causing this, given the success running ctest by
> hand, maybe there is something wrong with makepkg-mingw, the build
> program, running the tests.  Thanks for your suggestion Marcus, I feel
> much more comfortable updating the package.
>
> Best regards,
>
> Chris
>
> On Tue, Feb 25, 2025 at 11:35 AM Marcus Müller <mmuel...@gnuradio.org> wrote:
> >
> > ah, just noticed: the `_test` at the end of the -R argument is wrong, 
> > please just `-R
> > wavfile` and `-R interleave`
> >
> > On 2/25/25 5:09 PM, Marcus Müller wrote:
> > > Hi Chris,
> > >
> > > I introduced that log message, because, well, we haven't implemented the 
> > > feature to set
> > > user thread names on Windows. That's always been the case, and hasn't 
> > > changed.
> > >
> > > Now, your three test case failures do worry me. Could you maybe attach 
> > > the outputs of
> > >
> > > ctest -R wavfile_test --output-on-failure
> > > ctest -R interleave_test --output-on-failure
> > >
> > > ?
> > >
> > > Thank you for reporting things like these,
> > > Marcus
> > >
> > > On 2/24/25 6:53 PM, Chris Gorman wrote:
> > >> Hello All,
> > >>
> > >> I'm in the process of updating the msys2 / mingw64 implementation of
> > >> gnuradio to 3.10.12.0 and have run into a problem with threading.  Two
> > >> tests fail[1] and one times out[2] while running the test suite.  When
> > >> run on their own, all three tests return 0 and appear to run properly,
> > >> but for a thread error.  I also get this error when running
> > >> gnuradio-companion.exe.  For each test case, and grc, I get multiple
> > >> lines of:
> > >>
> > >> "thread :error: function set_thread_name(gr_thread_t, string) not
> > >> implemented on this platform"
> > >>
> > >> My experience with threading is minimal and I feel uneasy proceeding
> > >> with the update, given the error.  If someone with more experience
> > >> could let me know their opinion on whether or not the thread error is
> > >> a cause for concern, I would appreciate it.
> > >>
> > >> Thanks in advance,
> > >>
> > >> Chris
> > >>
> > >> [1] qa_wavfile_test.bat and qa_interleave_test.bat
> > >> [2] qa_mute_test.bat
> > >>
> > >
> >

Reply via email to