Libelektra: ABI breakage in libtools

Created on 29 Oct 2017  ยท  15Comments  ยท  Source: ElektraInitiative/libelektra

Describe what you wanted to do

Installing libelektra-test_0.8.19-1_amd64.deb and then run all tests with Elektra 0.8.20.

Describe what you expected

Some failing tests are expected:

# heavily changed internal ABIs
test_opmphm_vheap
test_opmphm_vstack
# breaks on every internal KDB change
test_splitget
test_splitset
# changes in fcrypt?
testmod_fcrypt
# changes in INI parser
testmod_ini   
# contract from dump changed:
testtool_samemountpoint
testtool_backend

Fcrypt:

FCRYPT       TESTS
==================

/home/markus/Projekte/Elektra/libelektra/src/plugins/fcrypt/testmod_fcrypt.c:162: error in test_file_operations: kdb set failed
/home/markus/Projekte/Elektra/libelektra/src/plugins/fcrypt/testmod_fcrypt.c:163: error in test_file_operations: file content did not change during encryption
/home/markus/Projekte/Elektra/libelektra/src/plugins/fcrypt/testmod_fcrypt.c:166: error in test_file_operations: kdb get (pregetstorage) failed
/home/markus/Projekte/Elektra/libelektra/src/plugins/fcrypt/testmod_fcrypt.c:170: error in test_file_operations: kdb get (postgetstorage) failed
/home/markus/Projekte/Elektra/libelektra/src/plugins/fcrypt/testmod_fcrypt.c:171: error in test_file_operations: postgetstorage did not encrypt the file again

fcrypt RESULTS: 27 test(s) done. 5 error(s).

INI:

INI         TESTS
==================

/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:44: error in test_plainIniRead: section value was not empty
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:44: error in test_plainIniRead: section value was not empty
Compare <emptykey
>, with <#@META ini/empty = 
>
in file /usr/share/libelektra-test/test-data/ini/emptyval, line 6.
/home/markus/Projekte/Elektra/libelektra/tests/cframework/tests.c:174: error in compare_line_files: comparing lines failed
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:106: error in test_plainIniEmptyWrite: files do not match as expected
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:298: error in test_sectionRead: empty section key is not a binary key
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:299: error in test_sectionRead: section key contains non null data
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:303: error in test_sectionRead: section1 key is not a binary key
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:304: error in test_sectionRead: section1 contains non null data
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:316: error in test_sectionRead: section2 key is not a binary key
/home/markus/Projekte/Elektra/libelektra/src/plugins/ini/testmod_ini.c:317: error in test_sectionRead: section2 contains non null data

test_ini RESULTS: 194 test(s) done. 10 error(s).

Describe what actually happened

Some crashes indicate an ABI break of public ABIs, in particular libelektra-tools:

testtool_backendbuilder
testtool_backendparser
testtool_keyhelper
testtool_mergingkdb
testtool_pluginspec
testtool_specreader
testtool_umount

with the errors:

--- running testtool_backendbuilder ---


Running main() from gtest_main.cc
[==========] Running 30 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 26 tests from BackendBuilder
[ RUN      ] BackendBuilder.withDatabase
/usr/lib/elektra/tool_exec/testtool_backendbuilder: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_backendbuilder: undefined symbol: _ZN3kdb5tools10PluginSpecC1ESsNS_6KeySetE
error: testtool_backendbuilder
--- running testtool_backendparser ---


Running main() from gtest_main.cc
[==========] Running 10 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 10 tests from MountBackendBuilder
[ RUN      ] MountBackendBuilder.parsePluginArguments
/usr/lib/elektra/tool_exec/testtool_backendparser: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_backendparser: undefined symbol: _ZN3kdb5tools20parsePluginArgumentsERKSsS2_
error: testtool_backendparser

--- running testtool_keyhelper ---


Running main() from gtest_main.cc
[==========] Running 10 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 4 tests from RebasePath
[ RUN      ] RebasePath.RebasesCorrectlyWithValidArguments
/usr/lib/elektra/tool_exec/testtool_keyhelper: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_keyhelper: undefined symbol: _ZN3kdb5tools6helper10rebasePathERKNS_3KeyES4_S4_
error: testtool_keyhelper
--- running testtool_mergingkdb ---


Running main() from gtest_main.cc
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from MergingKDBTest
[ RUN      ] MergingKDBTest.HandlesUnconflictingKeySets
/usr/lib/elektra/tool_exec/testtool_mergingkdb: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_mergingkdb: undefined symbol: _ZN3kdb5tools10PluginSpecC1ESsNS_6KeySetE
error: testtool_mergingkdb
--- running testtool_specreader ---


Running main() from gtest_main.cc
[==========] Running 12 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 12 tests from SpecReader
[ RUN      ] SpecReader.withDatabase
/usr/lib/elektra/tool_exec/testtool_specreader: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_specreader: undefined symbol: _ZN3kdb5tools10PluginSpecC1ESsNS_6KeySetE
error: testtool_specreader
--- running testtool_umount ---


Running main() from gtest_main.cc
[==========] Running 20 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 20 tests from Umount
[ RUN      ] Umount.SimpleRoot
/usr/lib/elektra/tool_exec/testtool_umount: symbol lookup error: /usr/lib/elektra/tool_exec/testtool_umount: undefined symbol: _ZN3kdb5tools8Backends6umountERKSsRNS_6KeySetE
error: testtool_umount

System Information

  • Elektra Version: master (a351691e4e8c7c916fa0864ece0e44a9634240d6) and 0.8.19 tests

Further Log Files and Output

Most helpful comment

@markus2330 I'm not sure if i can be a big help regarding the abi changes, but your suggestion to think about the type system integration was very useful. I've opened a separate issue for discussions about that, as it doesn't really belong to this issue and got quite large.

All 15 comments

Could you please tell me where I can find libelektra-test_0.8.19-1_amd64.deb? The debian repo already contains the lastest release (0.8.20).

I am afraid it is not available in the Internet anymore, I have sent you an email so that you do not have to rebuild it.

But I am not 100% if the build I have is correct (from the 0.8.19 tag and not from something shortly before/after). So a rebuild might be necessary anyway.

Since installing the Debian image did not work (missing dependencies), I am going to test under macOS. Below you can find the current results:

  • 7fe04aef: โœ…
  • 1b462164: โœ…
  • e5ca36d5: โœ…
  • 09fe3371: โœ…
  • 4675bb17: โœ…
  • cf9fd8f3: โœ…
  • 50a4762d: โœ…
  • 1daa04ee: โœ…
  • b2352b03: โœ…
  • fa1fa6d9: โœ…
  • c63560fb: โœ…
  • 882a49ce: โœ…
  • ce9ef070: โœ…
  • 478c7c3c: โœ… (๐Ÿ˜ฑ looked at the wrong test: testruby_tools ๐Ÿ˜ข)
  • 19433aa8: โœ…
  • 1e00e662: โœ…
  • eb63e50b: โœ…
  • 11cbbc61: โœ…
  • 0ad0eca2: โœ…
  • e9c2aa92: โœ…
  • 2e14c5ce: โœ…
  • 75038405: โœ…
  • 38417d24: โœ…
  • master: โœ… (๐Ÿ˜ฅ)

Can you please explain the results? 2c6c701f305c8ca38dd79ab3a6c334b3d0d43f77 does not seem like it contains C++ ABI breaks. It might break something in the kdb ls command-line interface.

Can you please explain the results?

I just installed Elektra 0.8.19. Now I am in the process of checking the first commit that broke one of the testtool tests. I will append the list in my comment above accordingly. After I find the responsible commit I will add another comment about the commit/PR that broke the tests. Basically I execute a non-intelligent very bad version of something that looks a bit like binary search ๐Ÿ˜Š.

You can safely assume that only changes in src/libs/tools/include are relevant (for C++ libtools breakage).

@e1528532 Maybe you can also take a look? Would be good if you can think about how to integrate the type checks into libtools, so that the type checks are always done.

Turns out I am unable to reproduce this error. I installed Elektra 0.8.19 but the current tests still work on my machine.

Its the other way round: you need to install the tests from 0.8.19, and Elektra 0.8.20.

How can I only install the tests? Is there a target to do that? So If I understand you right, the procedure should be:

  1. Install Elektra 0.8.20
  2. Overwrite the tests with the ones from 0.8.19
  3. Run kdb test

?

Yes, you simply install the libelektra-test_0.8.19-1_amd64.deb (might need dpkg -i --force-all), then you have the tests of libelektra 0.8.19.

@markus2330 I'm not sure if i can be a big help regarding the abi changes, but your suggestion to think about the type system integration was very useful. I've opened a separate issue for discussions about that, as it doesn't really belong to this issue and got quite large.

Okay, the problem is that even constness changes the ABI ;(

Seems I have to revert the rest of the changes in API. We will reintroduce them later.

7a5e0694dc065ed909675595da2bb07975d0da77

Looks much better now: Following test cases failed:

  • test_opmphm_vheap
  • test_opmphm_vstack
  • test_splitget
  • test_splitset
  • testmod_fcrypt
  • testmod_ini
  • testtool_backend
  • check_kdb_internal_check

There are many API/ABI breaks waiting as TODOs in libtools. We should do them all at once when we also add a new feature (e.g. import/export) in libtools.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mpranj picture mpranj  ยท  3Comments

mpranj picture mpranj  ยท  3Comments

markus2330 picture markus2330  ยท  4Comments

mpranj picture mpranj  ยท  3Comments

sanssecours picture sanssecours  ยท  3Comments