قم بتجميع وتثبيت Elektra ، وإزالة (أو إعادة تسمية) دليل المصدر / البناء. ثم قم بتشغيل kdb run_all
يجب تشغيل جميع حالات الاختبار بنجاح.
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
يرجى أيضًا إضافة اختبار إلى خادم الإنشاء الذي يقوم بإجراء الاختبارات بعد إزالة أدلة المصدر / الإنشاء.
فشل الاختبار specload
واضح جدًا:
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
بالنسبة إلى quickdump
لا أستطيع أن أقول بالضبط ما هو الخطأ ، لكنه فشل في مكان ما في elektraQuickdumpSet
. يجب أن يكون هناك خطأ معين في setKey
، لكن أعتقد أنه لم يتم تسجيله (يجب تغيير ذلك على الأرجح).
لا فكرة ، لماذا فشل gopts
. نظرًا لعدم طباعة أي رسالة خطأ ، أظن أنه لا يمكن تنفيذ testapp elektra-gopts-testapp
(إنها الحالة الوحيدة التي لن تتم طباعة أي رسالة خطأ فيها). سيكون أيضًا متوافقًا مع الخطأ specload
.
فشل اختبار تحميل المواصفات واضح جدًا:
نعم ، ولكن من الخطأ توقع وجود ثنائيات في دليل الإنشاء بعد تثبيت التطبيق. يجب تثبيت الثنائيات والبحث فيها في دليل الإنشاء أو التثبيت.
فشل اختبار تحميل المواصفات واضح جدًا:
نعم ، ولكن من الخطأ توقع وجود ثنائيات في دليل الإنشاء بعد تثبيت التطبيق. يجب تثبيت الثنائيات والبحث فيها في دليل الإنشاء أو التثبيت.
أوه ، فاتني أنك قمت بتثبيت Elektra. ومع ذلك ، هذا لا يفسر فشل quickdump
، حيث تم تثبيت بيانات الاختبار الخاصة به بشكل صحيح.
أنا أيضًا لست متأكدًا من كيفية حل هذه المشكلة. بالطبع يمكننا تثبيت الملفات التنفيذية لتطبيقات الاختبار ، ولكن يجب تعديل ملفات الاختبار التنفيذية الفعلية أثناء وقت التثبيت لتغيير المكان الذي يبحثون فيه عن تطبيق الاختبار.
إن البحث عن الثنائيات (في البناء أو dir المثبت) يتطلب الكثير من العمل ، ويمكننا أيضًا استبعاد الاختبارات من التثبيت.
يمكننا ببساطة استخدام مسار نسبي والتأكد من بقائه كما هو أثناء التثبيت ، على سبيل المثال ، وجود كلا الثنائيين في نفس الدليل.
نعم فكرة جيدة.
سيكون الحل الأكثر عمومية هو إذا كان لدينا kdb <command>
متاحًا أيضًا في دليل الإنشاء (يعمل حاليًا فقط إذا تم تثبيت Elektra). سيكون بعض العمل إلى حد ما لأن KDB_EXEC_PATH يدعم مسارًا واحدًا فقط ولكن الثنائيات مبعثرة في أجزاء مختلفة من دليل البناء.
لدينا دينار كويتي
متاح أيضًا في دليل البناء
يمكن تنفيذ الاختبارات بسهولة عبر ctest
و / أو make
. بالنسبة للأوامر الأخرى ، فإن معظمها منطقي فقط لنسخة مثبتة من Elektra على أي حال.
يمكننا ببساطة استخدام مسار نسبي والتأكد من بقائه كما هو أثناء التثبيت ، على سبيل المثال ، وجود كلا الثنائيين في نفس الدليل.
تبين أن هذا أصعب مما كان متوقعا. سيتعامل stdlib مع المسار النسبي بالنسبة إلى دليل العمل الحالي ، وهو أمر غير مفيد ولا يمكن حل المسار المتعلق بمسار الملف التنفيذي الحالي بطريقة مستقلة عن النظام الأساسي.
وبالتالي فإن الطريقة kdb <command>
ستكون جذابة للغاية.
للتثبيت يكفي تثبيته على TARGET_TOOL_EXEC_FOLDER
فقط أثناء وقت الإنشاء ، نحتاج إلى طريقة ما للجمع بين build_dir / bin build_dir / scripts source_dir / scripts والمجلدات الحالية (ربما أيضًا بناء + مصدر).
kodebach هذا لا يزال مفتوحا؟ هل يمكن أن نكتشف هذا الموقف كثيرين ونترك الاختبارات لا تعمل في هذه الحالة؟
أو نصلحها: يسمح KDB_EXEC_PATH الآن بمسارات متعددة ، حتى نتمكن من إضافة أي مجلدات نحتاجها من دليل البناء / المصدر. ثم ترك ببساطة kdb
يقوم بمهمة العثور على الملف القابل للتنفيذ.
AFAIK هذا لا يزال مفتوحا ، نعم.
لدينا بالفعل الوظيفة srcdir_file
للاختبارات. يمكننا تقديم bindir_file
مشابه. سيكون bindir
افتراضيًا هو ${CMAKE_INSTALL_PREFIX}/${TARGET_TOOL_EXEC_FOLDER}
، لكن سيكون هناك طريقة ما لتجاوزه. سيتم إعداد CTest (عبر add_test
الخاص بـ CMake) بحيث يتم تعيين bindir
على ${CMAKE_BINARY_DIR}/bin
عند استخدام ctest
.
وببساطة إضافة bindir إلى KDB_EXEC_PATH واستخدام kdb <bin>
لا يعمل؟
لا ، لعدة أسباب:
testmod_
، يجب ألا تعتمد على kdb
.kdb
إذن؟ تنفيذ الاختبارات باستخدام make run_all
يجب ألا يستخدم kdb
، لكن الاختبار الموجود في ${CMAKE_BINARY_DIR}/bin
.KDB_EXEC_PATH
يحتوي على المجلد ${CMAKE_BINARY_DIR}/bin
، بعد تثبيت kdb
، والذي قد يسبب مشاكل مختلفة.هذه اختبارات testmod_ ، لا ينبغي أن تعتمد على kdb.
نعم اوافق. إنه لأمر جيد إذا كانوا يعملون بشكل مستقل.
فكيف سنجد دينار كويتي إذن؟ تنفيذ الاختبارات باستخدام make run_all لا يجب أن يستخدم kdb المثبت ، ولكن الاختبار الموجود في $ {CMAKE_BINARY_DIR} / bin.
تستخدم اختبارات Shellrecorder بالفعل kdb ، وهي تعمل مع كل من Elektra المثبت ومن دليل الإنشاء (حتى إذا تم تثبيت Elektra).
سيظل KDB_EXEC_PATH يحتوي على المجلد $ {CMAKE_BINARY_DIR} / bin ، بعد تثبيت kdb ، والذي قد يسبب مشاكل مختلفة.
لا ، لم يتم تعيين KDB_EXEC_PATH على كيلو ديسيبل مثبت (إلا إذا قام المستخدم بتعيينه)
تستخدم اختبارات Shellrecorder بالفعل kdb ، وهي تعمل مع كل من Elektra المثبت ومن دليل الإنشاء (حتى إذا تم تثبيت Elektra).
يعمل هذا لأن اختبارات الصدفة تنفذ دائمًا "$KDB"
ولا تنفذ أبدًا kdb
. وأيضًا لأن make run_all
و ctest
يستخدمان على سبيل المثال نصوص testscr_check_meta.sh
، بينما يستخدم kdb
مثل check_meta.sh
. في الأول قمنا بتعيين $KDB
إلى ${CMAKE_BINARY_DIR}/bin/kdb
في الثانية ، تم تعيينه ببساطة على kdb
(وبالتالي تم حله عبر $PATH
).
لا ، لم يتم تعيين KDB_EXEC_PATH على كيلو ديسيبل مثبت (إلا إذا قام المستخدم بتعيينه)
لقد أخذت الإصدار الرئيسي من Elektra وقمت بتثبيته. يحتوي الملف /usr/local/lib/elektra/tool_exec/check_meta
على السطر:
export KDB_EXEC_PATH="/home/klemens/libelektra/build/bin:$KDB_EXEC_PATH"
بالطبع لا يؤثر هذا على اختبارات testmod_*
، لكنه خطأ مع ذلك. سوف أقوم بإنشاء عدد جديد.
@ petermax2kodebach ما هو وضع هذه القضية؟ هل تم إصلاح # 3246 الآن (عبر # 3409) ، بقية هذه المشكلة فقط مشاكل التعبئة والتغليف أم هناك شيء متبقي ليتم تنفيذه؟
AFAIK المشكلة الأصلية مع specload
لا تزال موجودة. TBH لست متأكدًا من سبب وجوب اختيار تثبيت اختبارات testmod_
. لا معنى له. هذه اختبارات قائمة بذاتها تختبر مكونًا إضافيًا واحدًا على حدة. إذا تم تشغيلها بالفعل ، فستكون نتائجها هي نفسها بغض النظر عما إذا تم تنفيذها في دليل الإنشاء أو دليل التثبيت.
TBH لست متأكدًا من سبب وجوب خيار تثبيت اختبارات testmod_.
في الوقت الحالي ، ليس لدينا خيار لتعطيل تثبيت الاختبارات ولكن يمكننا إجراء تجاوز محلي لجعل اختبارات add_plugintest
غير مثبتة (مثل INSTALL_TESTING ولكن للفرد add_plugintest
).
لا معنى له. هذه اختبارات قائمة بذاتها تختبر مكونًا إضافيًا واحدًا على حدة. إذا تم تشغيلها بالفعل ، فستكون نتائجها هي نفسها بغض النظر عما إذا تم تنفيذها في دليل الإنشاء أو دليل التثبيت.
: wink: ، هناك الكثير من الاختلافات ، لكن معظمها كان مرتبطًا بنظام البرنامج المساعد نفسه (نأمل أن يتم إصلاحها جميعًا الآن). ولكن لا يزال هناك مجموعة كبيرة من مشكلات التبعية المحتملة ومشكلات التثبيت ، لذا فإن إجراء اختبارات testmod في الحالة المثبتة أفضل بكثير من عدم تشغيل أي شيء. لكنك محق في أنه إذا كان هناك اختبار shellrecorder ، فإن اختبار testmod يكون عديم الفائدة.
kodebach هل يمكنك التحقق مما إذا كان يمكن استبعاد هذه الاختبارات بأمان؟
robaerd هل يمكنك استبعادهم في أحد CI PRs؟ (قبل أو حيث تضيف اختبار الحزم.)
@ markus2330 هل ما زالت مشكلة التفريغ السريع تحدث لك؟ AFAIK لم نكتشف أبدًا ما هو الخطأ هناك. أنا أيضا لا أستطيع إعادة إنتاجه.
للحصول على gopts و specload انظر # 3618
نعم ، مازال يحدث:
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
أو عندما أسميها من المصدر:
اختبار varint
أساسيات الاختبار
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:92: خطأ في test_basics: استدعاء kdbGet لم يكن ناجحًا
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:93: خطأ في test_basics: الحجم الحقيقي لـ mmks2 كان 0
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:93: خطأ في test_basics: فشل مقارنة مجموعة المفاتيح ، حجم مجموعات المفاتيح لا يساوي الحجم (mmks1): 8 ، الحجم (mmks2): 0
mmks1:
0x55a9efd438d0 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 112 ، السلسلة: gQHLlzB36CqIFlf ، meta: / meta / _35: O6xNya6srhNhMFC ، meta: / meta / _39: ublVuvyh1DgfOKU ، meta: / meta2 / _58H ZK2xlaRMfobquxp ، meta: / meta / _90: 0kCcc1pK7hOgY3F
0x55a9efd44250 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 114 ، السلسلة: ، ميتا: / ثنائي:
0x55a9efd441a0 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 333 ، السلسلة: SxTUAjM6OIpUV6s
0x55a9efd440f0 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 506 ، السلسلة: cGqEvmXxUayNCf8
0x55a9efd44040 مفتاح: dir: / tests / مقاعد البدلاء / __ 859 ، السلسلة: rOI5aVFGlnjPLYJ
0x55a9efd43f90 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 863 ، السلسلة: 8IBjbd5pzYBehrs
0x55a9efd43f20 المفتاح: dir: / الاختبارات / مقاعد البدلاء / __ 868 ، السلسلة: UVM0OPTf68yNXij
0x55a9efd43d90 key: dir: /
mmks2:
/home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:111: خطأ في test_basics: استدعاء kdbSet لم يكن ناجحًا
zsh: خطأ تجزئة (تم تفريغ النواة) LD_LIBRARY_PATH = lib bin / testmod_quickdump
Stacktrace:
at /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:31
37 getc.c: Datei أو Verzeichnis nicht gefunden.
(gdb) bt
at /home/markus/Projekte/Elektra/current/src/plugins/quickdump/testmod_quickdump.c:31
(gdb) bt ممتلئ
result = <optimized out>
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>
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"
""
أو عندما أسميها من المصدر:
عند إجراء الاختبارات مباشرةً ، يرجى استخدام ctest
(على سبيل المثال ، ctest -R testmod_quickdump --ouptut-on-failure
) للتأكد من أن البيئة و Args وما إلى ذلك قد تم ضبطها بشكل صحيح.
في هذه الحالة ، أعتقد أن LD_LIBRARY_PATH=lib bin/testmod_quickdump ../src/plugins/quickdump
هو ما تحتاجه (إذا كنت تريد التصحيح باستخدام مثل gdb
).
هل /usr/local/share/elektra/test_data/quickdump/test.quickdump
موجود على نظامك وهل للعملية الحق في الكتابة إلى /usr/local/share/elektra/test_data/quickdump/test.quickdump.out
؟ (ربما تحتاج sudo kdb testmod_quickdump
)
إذا كان الأمر كذلك ، يرجى الإضافة
output_error (setKey);
output_warnings (setKey);
testmod_quickdump.c:112
وقم بترحيل الناتج.
فشل elektraQuickdumpSet
، لذا فإن حقيقة أن فشل compare_binary_files
أمر متوقع تمامًا. (يمكن أن تكون رسالة الخطأ أفضل بالطبع ويمكن تجنب segfault ، ولكنه اختبار _ فاشل_ لذا لا يهم كثيرًا حقًا)
نعم ، المشكلة أن حالات الاختبار تحاول إنشاء ملفات مؤقتة في مجلد غير مناسب لذلك. sudo kdb testmod_quickdump
يعمل بدون مشاكل. لذلك يجب أن يكفي استخدام وظائفنا لإنشاء ملفات مؤقتة بدلاً من استخدام "test_data / quickdump / test.quickdump.out"
يمكننا تغيير ذلك بنعم ، لكن العديد من الاختبارات لا يتم إجراؤها بدون sudo
أي حال ، لذا لا أرى أن هذا يمثل مشكلة
ما هي الاختبارات التي تتحدث عنها؟ أقوم دائمًا بتشغيل المجموعة بأكملها بدون sudo (ولكن مع أذونات الكتابة إلى مسار Elektra). testmod_quickdump هو الاختبار الوحيد لهذه المشكلة.
ولكن مع أذونات الكتابة إلى مسار Elektra
حسنًا ، هذا يعمل أيضًا ، ولكن في النظام القياسي ، فإن هذه المسارات هي الوصول إلى الجذر فقط.
ما زلت أعتقد أن المفهوم الكامل لتشغيل اختبارات الوحدة في إصدار مثبت من Elektra غريب وأن مشكلة Quickdump هي مجرد مشكلة تتعلق بحقوق المستخدم وليست خطأ ، لكنني سأغير المسار في # 3618.
لقد قمت الآن بتحديث الكود في # 3618. لقد وجدت أيضًا رمزًا مشابهًا في testmod_dump
وقمت بتغيير ذلك بشكل جيد. لا فكرة ، لماذا لم يفشل ذلك بالنسبة لك. قد يكون لدى testmod_xmltool
مشكلة مماثلة (على الرغم من اختلاف الكود لذا لم أغيره).
testmod_quickdump
كان لواحد فقط من أولئك الذين استخدموا الملفات الثنائية وبالتالي لم يستخدم compare_line_files
. لذلك لن يخطئ الآخرون ، لكن الاختبارات يجب أن تفشل.
و أن مشكلة التفريغ السريع هي مشكلة تتعلق بحقوق المستخدم فقط وليست خطأ ،
إنه انتهاك لـ FHS ، ليس من المفترض أن تكتب التطبيقات إلى / usr ، بل قد تكون للقراءة فقط.
للكتابة ، يجب أن نستخدم الملفات المؤقتة فقط ويجب علينا أيضًا تنظيفها بعد انتهاء الاختبارات.