Libelektra: gopts, quickdump, specload: tes gagal

Dibuat pada 4 Agu 2019  ·  28Komentar  ·  Sumber: ElektraInitiative/libelektra

Langkah-langkah untuk Mereproduksi Masalah

Kompilasi dan instal Elektra, hapus (atau ganti nama) direktori source/build. Kemudian jalankan kdb run_all

Hasil yang diharapkan

Semua kasus uji harus berjalan dengan sukses.

Hasil Sebenarnya

Running testmod_gopts

GOPTS     TESTS
==================

test empty
GOPTS     TESTS
==================

test empty
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/gopts/testmod_gopts.c:78: error in run_test: child process test failed
test singleopt
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/tests/cframework/tests.c:523: error in clean_temp_home: Could not delete TMPHOME via nftw
GOPTS     TESTS
==================
Running testmod_quickdump
QUICKDUMP     TESTS
==================

test varint
test basics
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/quickdump/testmod_quickdump.c:111: error in test_basics: call to kdbSet was not successful

Program received signal SIGSEGV, Segmentation fault.
_IO_getc (fp=0x0) at getc.c:37
37      getc.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0  _IO_getc (fp=0x0) at getc.c:37
#1  0x0000555555556bb7 in compare_binary_files (filename1=<optimized out>, filename2=<optimized out>) at ./src/plugins/quickdump/testmod_quickdump.c:31
#2  0x0000555555556f9a in test_basics () at ./src/plugins/quickdump/testmod_quickdump.c:113
#3  0x0000555555556807 in main (argc=1, argv=0x7fffffffe278) at ./src/plugins/quickdump/testmod_quickdump.c:332
Running testmod_specload

SPECLOAD     TESTS
==================

test basics
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/specload/testmod_specload.c:63: error in test_basics: call to checkConfig was not successful
There are 1 warnings
buffer is: warnings/#00
number: C01330
description: Plugin Misbehavior
module: kdb
file: /home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/libs/elektra/plugin.c
line: 302
reason: Open of plugin returned unsuccessfully: specload. Reason contains plugin, see other warnings for details
reason: 
reason: 
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/specload/testmod_specload.c:65: error in test_basics: warnings in kdbOpen for plugin specload
number: C01100
description: : Resource
module: : specload
at: /home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/specload/specload.c:372
reason: : App '/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/obj-x86_64-linux-gnu/bin/elektra-specload-testapp' doesn't exist or is not executable
mountpoint: : 
configfile: : 
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/specload/testmod_specload.c:65: error in test_basics: error in kdbOpen for plugin specload
/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/src/plugins/specload/testmod_specload.c:65: fatal in test_basics: could not open specload plugin
error: testmod_specload

Sistem Informasi

  • Versi Elektra: master

Informasi lebih lanjut

Harap tambahkan juga tes ke server build yang menjalankan tes setelah direktori source/build dihapus.

Semua 28 komentar

Kegagalan pengujian specload cukup eksplisit:

reason: : App '/home/jenkins/workspace/libelektra_master-Q2SIBK3KE2NBEMJ4WVGJXAXCSCB77DUBUULVLZDKHQEV3WNDXBMA/libelektra/obj-x86_64-linux-gnu/bin/elektra-specload-testapp' doesn't exist or is not executable

Untuk quickdump Saya tidak bisa mengatakan dengan tepat apa yang salah, tetapi gagal di suatu tempat di elektraQuickdumpSet . Seharusnya ada kesalahan yang diatur dalam setKey , tetapi saya pikir itu tidak dicatat (yang mungkin harus diubah).

Tidak tahu, mengapa gopts gagal. Karena tidak ada pesan kesalahan yang dicetak, saya menduga testapp elektra-gopts-testapp tidak dapat dijalankan (ini satu-satunya kasus di mana tidak ada pesan kesalahan yang akan dicetak). Itu juga akan sejalan dengan kesalahan specload .

Kegagalan tes specload cukup eksplisit:

Ya, tetapi salah mengharapkan binari di direktori build setelah aplikasi diinstal. Binari harus diinstal dan dicari di direktori build atau instalasi.

Kegagalan tes specload cukup eksplisit:

Ya, tetapi salah mengharapkan binari di direktori build setelah aplikasi diinstal. Binari harus diinstal dan dicari di direktori build atau instalasi.

Oh, saya rindu Anda menginstal Elektra. Namun, itu tidak menjelaskan kegagalan quickdump , data pengujiannya diinstal dengan benar.

Saya juga tidak yakin bagaimana menyelesaikan masalah ini. Tentu saja kita dapat menginstal executable dari aplikasi pengujian, tetapi executable pengujian yang sebenarnya harus dimodifikasi selama waktu penginstalan untuk mengubah di mana mereka mencari aplikasi pengujian.

Terlalu banyak pekerjaan untuk mencari binari (baik di build atau dir yang diinstal), kami juga dapat mengecualikan tes agar tidak diinstal.

Kita cukup menggunakan jalur relatif dan memastikan bahwa itu tetap sama selama instalasi, misalnya memiliki kedua binari di direktori yang sama.

Ya, ide yang bagus.

Solusi yang lebih umum adalah jika kdb <command> tersedia juga di direktori build (saat ini hanya berfungsi jika Elektra diinstal). Ini akan cukup berhasil karena KDB_EXEC_PATH hanya mendukung satu jalur tetapi binari tersebar di banyak bagian berbeda dari direktori build.

kita punya kdbtersedia juga di direktori build

Tes dapat dengan mudah dijalankan melalui ctest dan/atau make . Adapun perintah lain, kebanyakan dari mereka hanya masuk akal untuk versi Elektra yang diinstal.

Kita cukup menggunakan jalur relatif dan memastikan bahwa itu tetap sama selama instalasi, misalnya memiliki kedua binari di direktori yang sama.

Ternyata ini lebih sulit dari yang diharapkan. Stdlib akan memperlakukan jalur relatif sebagai relatif terhadap direktori kerja saat ini, yang tidak membantu dan menyelesaikan jalur relatif terhadap jalur yang dapat dieksekusi saat ini tidak mungkin dilakukan dengan cara yang independen dari platform.

Jadi cara kdb <command> akan cukup menarik.

Untuk instalasi cukup dengan menginstalnya ke TARGET_TOOL_EXEC_FOLDER

Hanya selama waktu pembuatan kita memerlukan beberapa cara untuk menggabungkan build_dir/bin build_dir/scripts source_dir/scripts dan direktori saat ini (mungkin juga keduanya build+source).

@kodebach apakah ini masih buka? Bisakah kita banyak mendeteksi situasi ini dan membiarkan tes tidak berjalan dalam situasi ini?

Atau kami memperbaikinya: KDB_EXEC_PATH sekarang memungkinkan banyak jalur, jadi kami dapat menambahkan folder apa pun yang kami butuhkan dari direktori build/source. Kemudian Anda cukup membiarkan kdb melakukan pekerjaan menemukan executable.

AFAIK ini masih buka ya.

Kami sudah memiliki fungsi srcdir_file untuk pengujian. Kami dapat memperkenalkan bindir_file yang serupa. bindir akan default ke ${CMAKE_INSTALL_PREFIX}/${TARGET_TOOL_EXEC_FOLDER} , tetapi mereka akan menjadi beberapa cara untuk menimpanya. CTest akan diatur (melalui add_test ) CMake sehingga bindir diatur ke ${CMAKE_BINARY_DIR}/bin saat menggunakan ctest .

Dan cukup menambahkan bindir ke KDB_EXEC_PATH dan menggunakan kdb <bin> tidak berfungsi?

Tidak, karena beberapa alasan:

  1. Ini adalah testmod_ tes, mereka tidak boleh bergantung pada kdb .
  2. Bagaimana kita menemukan kdb ? Menjalankan tes dengan make run_all tidak boleh menggunakan kdb yang diinstal, tetapi yang ada di ${CMAKE_BINARY_DIR}/bin .
  3. KDB_EXEC_PATH masih akan berisi folder ${CMAKE_BINARY_DIR}/bin , setelah menginstal kdb , yang dapat menyebabkan masalah yang berbeda.

Ini adalah tes testmod_, mereka tidak harus bergantung pada kdb.

Ya saya setuju. Adalah baik jika mereka bekerja secara mandiri.

Bagaimana kita menemukan kdb? Menjalankan tes dengan make run_all tidak boleh menggunakan kdb yang diinstal, tetapi yang ada di ${CMAKE_BINARY_DIR}/bin.

Tes Shellrecorder sudah menggunakan kdb, dan mereka bekerja untuk Elektra yang diinstal dan dari direktori build (bahkan jika Elektra diinstal).

KDB_EXEC_PATH masih akan berisi folder ${CMAKE_BINARY_DIR}/bin, setelah menginstal kdb, yang dapat menyebabkan masalah yang berbeda.

Tidak, KDB_EXEC_PATH tidak disetel untuk kdb yang diinstal (kecuali pengguna menyetelnya)

Tes Shellrecorder sudah menggunakan kdb, dan mereka bekerja untuk Elektra yang diinstal dan dari direktori build (bahkan jika Elektra diinstal).

Itu berhasil karena tes shell selalu mengeksekusi "$KDB" dan tidak pernah kdb . Dan juga karena make run_all dan ctest menggunakan misalnya skrip testscr_check_meta.sh , sedangkan kdb menggunakan misalnya check_meta.sh . Yang pertama kita set $KDB ke ${CMAKE_BINARY_DIR}/bin/kdb di yang kedua, itu hanya diatur ke kdb (dan karena itu diselesaikan melalui $PATH ).

Tidak, KDB_EXEC_PATH tidak disetel untuk kdb yang diinstal (kecuali pengguna menyetelnya)

Saya baru saja mengambil versi master Elektra dan menginstalnya. File /usr/local/lib/elektra/tool_exec/check_meta berisi baris:

export KDB_EXEC_PATH="/home/klemens/libelektra/build/bin:$KDB_EXEC_PATH"

Tentu saja ini tidak mempengaruhi pengujian testmod_* , tetapi tetap saja itu salah. Saya akan membuat masalah baru.

@petermax2 @kodebach apa status masalah ini? Apakah #3246 sudah diperbaiki sekarang (melalui #3409), sisa masalah ini hanya masalah pengemasan atau masih ada yang harus diimplementasikan?

AFAIK masalah asli dengan specload masih ada. TBH Saya tidak yakin mengapa kita bahkan harus memilih untuk menginstal tes testmod_ . Itu tidak masuk akal. Ini adalah pengujian mandiri yang menguji satu plugin secara terpisah. Jika mereka benar-benar berjalan, hasilnya akan sama tidak masalah jika dijalankan di direktori build atau direktori instal.

TBH Saya tidak yakin mengapa kita bahkan harus memilih untuk menginstal tes testmod_.

Saat ini kami tidak memiliki opsi untuk menonaktifkan pengujian penginstalan tetapi kami dapat membuat penggantian lokal untuk membuat add_plugintest tidak menginstal pengujian (seperti INSTALL_TESTING tetapi untuk individu add_plugintest ).

Itu tidak masuk akal. Ini adalah pengujian mandiri yang menguji satu plugin secara terpisah. Jika mereka benar-benar berjalan, hasilnya akan sama tidak masalah jika dijalankan di direktori build atau direktori instal.

:wink:, ada banyak perbedaan, tetapi kebanyakan dari mereka terkait dengan sistem plugin itu sendiri (Mudah-mudahan semuanya sudah diperbaiki sekarang). Tapi tetap saja, ada banyak kemungkinan masalah ketergantungan dan masalah instalasi sehingga menjalankan tes testmod dalam keadaan terinstal jauh lebih baik daripada tidak menjalankan apa pun. Tetapi Anda benar bahwa jika ada tes shellrecorder, tes testmod tidak ada gunanya.

  • [X] Jadi untuk quickdump sudah jelas testmod test tidak perlu di install.
  • [ ] Untuk specload ada test tapi sepertinya cukup minim, mungkin oke tapi lebih baik anda cek lagi.
  • [ ] Untuk gopts, kita dapat membiarkan program contoh berjalan di doc/tutorials/command-line-options.md?

@kodebach dapatkah Anda memeriksa apakah tes ini dapat dikecualikan dengan aman?

@robaerd dapatkah Anda mengecualikannya di salah satu CI PR Anda? (Sebelum atau di mana Anda menambahkan pengujian paket.)

@ markus2330 Apakah masalah quickdump masih terjadi untuk Anda? AFAIK kami tidak pernah tahu apa yang salah di sana. Saya juga tidak bisa mereproduksinya.

Untuk gopts dan specload lihat #3618

Ya, masih terjadi:

kdb testmod_quickdump                                                                                                                                                                                                                    
QUICKDUMP     TESTS
==================

test varint
test basics
/home/jenkins/workspace/libelektra_master/libelektra/src/plugins/quickdump/testmod_quickdump.c:111: error in test_basics: call to kdbSet was not successful
zsh: segmentation fault (core dumped)  noglob kdb testmod_quickdump

Atau ketika saya menyebutnya dari sumber:

```UJI CEPAT

varian uji
dasar-dasar tes
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:92: kesalahan dalam test_basics: panggilan ke kdbGet tidak berhasil
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:93: kesalahan dalam test_basics: ukuran sebenarnya mmks2 adalah 0
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:93: error in test_basics: Bandingkan keyset gagal, ukuran keyset tidak sama dengan size(mmks1): 8, size(mmks2): 0
mmks1:
0x55a9efd438d0 kunci: dir:/tests/bench/__112, string: gQHLlzB36CqIFlf, meta:/meta/_35: O6xNya6srhNhMFC, meta:/meta/_39: ublVuvyh1DgfOKU, meta:/meta/meta/_58: ZK2xlaRMfobquxp, meta:/meta/_90: 0kCcc1pK7hOgY3F
0x55a9efd44250 kunci: dir:/tests/bench/__114, string: , meta:/binary:
0x55a9efd441a0 kunci: dir:/tests/bench/__333, string: SxTUAjM6OIpUV6s
0x55a9efd440f0 kunci: dir:/tests/bench/__506, string: cGqEvmXxUayNCf8
0x55a9efd44040 kunci: dir:/tests/bench/__859, string: rOI5aVFGlnjPLYJ
0x55a9efd43f90 kunci: dir:/tests/bench/__863, string: 8IBjbd5pzYBehrs
0x55a9efd43f20 kunci: dir:/tests/bench/__868, string: UVM0OPTf68yNXij
0x55a9efd43d90 kunci: dir:/tests/bench/__911, string: PgNbwPxfeqD30pH, meta:/meta/_35: O6xNya6srhNhMFC
mmks2:
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:111: kesalahan dalam test_basics: panggilan ke kdbSet tidak berhasil
zsh: kesalahan segmentasi (core dibuang) LD_LIBRARY_PATH=lib bin/testmod_quickdump

Stacktrace:

0 0x00007fa7c770ed74 di _IO_getc (fp=0x0) di getc.c:37

1 0x000055a9ede54c58 di compare_binary_files (namafile2=0x55a9efd42a30 "/usr/local/share/elektra/test_data/quickdump/test.quickdump.out", namafile1=0x55a9efd429e0 "/usr/local/share/elektra/test_"/elektra/ )

at /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:31

2 test_basics () di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:113

3 0x000055a9ede545d7 di main (argc=1, argv=0x7ffff28085f8) di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:278


0 0x00007fa7c770ed74 di _IO_getc (fp=0x0) di getc.c:37

37 getc.c: Tanggal oder Verzeichnis nicht gefunden.
(gdb) bt

0 0x00007fa7c770ed74 di _IO_getc (fp=0x0) di getc.c:37

1 0x000055a9ede54c58 di compare_binary_files (namafile2=0x55a9efd42a30 "/usr/local/share/elektra/test_data/quickdump/test.quickdump.out", namafile1=0x55a9efd429e0 "/usr/local/share/elektra/test_"/elektra/ )

at /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:31

2 test_basics () di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:113

3 0x000055a9ede545d7 di main (argc=1, argv=0x7ffff28085f8) di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:278

(gdb) tapi penuh

0 0x00007fa7c770ed74 di _IO_getc (fp=0x0) di getc.c:37

    result = <optimized out>

1 0x000055a9ede54c58 di compare_binary_files (namafile2=0x55a9efd42a30 "/usr/local/share/elektra/test_data/quickdump/test.quickdump.out", namafile1=0x55a9efd429e0 "/usr/local/share/elektra/test_"/elektra/ )

at /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:31
    f2 = 0x0
    c1 = <optimized out>
    f1 = 0x0
    result = 0
    c2 = <optimized out>
    f1 = <optimized out>
    f2 = <optimized out>
    result = <optimized out>
    c1 = <optimized out>
    c2 = <optimized out>
    end1 = <optimized out>
    end2 = <optimized out>

2 test_basics () di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:113

    conf = <optimized out>
    modules = 0x55a9efd43a00
    setKey = 0x55a9efd42bb0
    errorKey = <optimized out>
    plugin = 0x55a9efd43b00
    ks = <optimized out>
    infile = 0x55a9efd429e0 "/usr/local/share/elektra/test_data/quickdump/test.quickdump"
    outfile = 0x55a9efd42a30 "/usr/local/share/elektra/test_data/quickdump/test.quickdump.out"
    __func__ = "test_basics"

3 0x000055a9ede545d7 di main (argc=1, argv=0x7ffff28085f8) di /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:27

```

Atau ketika saya menyebutnya dari sumber:

Saat menjalankan tes secara langsung, harap gunakan ctest (mis ctest -R testmod_quickdump --ouptut-on-failure ) untuk memastikan, lingkungan, argumen, dll. disetel dengan benar.

Dalam hal ini, saya pikir LD_LIBRARY_PATH=lib bin/testmod_quickdump ../src/plugins/quickdump adalah yang Anda butuhkan (jika Anda ingin men-debug dengan misalnya gdb ).


Apakah /usr/local/share/elektra/test_data/quickdump/test.quickdump ada di sistem Anda dan apakah proses memiliki hak untuk menulis ke /usr/local/share/elektra/test_data/quickdump/test.quickdump.out ? (Mungkin Anda perlu sudo kdb testmod_quickdump )

Jika demikian, silakan tambahkan

output_error (setKey);
output_warnings (setKey);

di testmod_quickdump.c:112 dan posting hasilnya.

elektraQuickdumpSet gagal, jadi fakta bahwa compare_binary_files gagal sangat diharapkan. (Pesan kesalahan tentu saja bisa lebih baik dan segfault dapat dihindari, tetapi ini adalah tes _failed_ sehingga tidak terlalu penting)

Ya, masalahnya adalah kasus uji coba membuat file sementara ke dalam folder yang tidak cocok untuk itu. sudo kdb testmod_quickdump berjalan tanpa masalah. Jadi seharusnya cukup menggunakan fungsi kita untuk membuat file sementara daripada menggunakan "test_data/quickdump/test.quickdump.out"

Kami dapat mengubahnya ya, tetapi banyak tes tidak berjalan tanpa sudo jadi saya tidak benar-benar melihat ini sebagai masalah

Tes mana yang Anda bicarakan? Saya selalu menjalankan seluruh suite tanpa Sudo (tetapi dengan izin menulis ke jalur Elektra). testmod_quickdump adalah satu-satunya tes dengan masalah itu.

tetapi dengan izin menulis ke jalur Elektra

Oke, itu juga berfungsi, tetapi pada sistem standar, jalur itu hanya akses root.

Saya masih berpikir seluruh konsep menjalankan tes unit dalam versi Elektra yang diinstal itu aneh dan masalah quickdump adalah murni masalah hak pengguna bukan bug, tetapi saya akan mengubah jalur di # 3618.

Saya sekarang telah memperbarui kode di #3618. Saya juga menemukan kode serupa di testmod_dump dan mengubahnya dengan baik. Tidak tahu, mengapa itu tidak gagal untuk Anda. testmod_xmltool mungkin memiliki masalah yang sama (walaupun kodenya berbeda jadi saya tidak mengubahnya).

testmod_quickdump hanya untuk salah satu dari mereka yang menggunakan file biner dan karena itu tidak menggunakan compare_line_files . Oleh karena itu yang lain tidak akan segfault, tetapi tes harus tetap gagal.

dan masalah quickdump adalah murni masalah hak pengguna bukan bug,

Ini merupakan pelanggaran terhadap FHS, aplikasi tidak seharusnya menulis ke /usr, bahkan mungkin hanya-baca.

Untuk penulisan kita hanya boleh menggunakan tempfiles dan kita juga harus membersihkannya setelah tes selesai.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

markus2330 picture markus2330  ·  4Komentar

mpranj picture mpranj  ·  3Komentar

mpranj picture mpranj  ·  3Komentar

dominicjaeger picture dominicjaeger  ·  3Komentar

e1528532 picture e1528532  ·  4Komentar