cfix 1.5 released; adds support for EXE-embedded tests and kernel mode multi-threading

A new version of the cfix unit testing framework is now ready for download.

Unlike the previous release, which was mainly a maintenance release, cfix 1.5 adds major new features: kernel mode multithreading and EXE-based unit tests.

EXE based unit tests

As I discussed in a previous post in the context of Visual Assert/cfix studio, cfix’ restriction to DLL based unit tests has turned out to be quite a limitation for certain kinds of projects.

In cfix 1.5, this restriction has been removed: cfix now supports both, unit tests compiled and linked into DLL modules and unit tests embedded into EXE modules.

Now, when I say embeded into an EXE module, I do not mean that you may merely leave out the /LD compiler switch — it means that you may compile and link unit tests into the actual application EXE module without impacting this application’s behavior or having to change the application’s main() routine: When you run the application direcly or through the debugger, it will behave as normal (e.g. launch GUI). Once you launch it via cfix32 -exe app.exe (or cfix64 -exe app.exe, respectively), however, the application’s main() routine will not execute and instead, your embedded unit tests will run.

This may seem awkward at first — but it offers a tremendous advantage: All of the application’s code now immediately becomes testable (i.e. accessible by unit test code) without having to do complex reorganization of your build process or source tree layout (although it is still a very good idea to enhance the build process s.t. the unit tests are stripped in the RTM builds and to make cfix.dll a delayload DLL). For many projects, relying on this feature will therefore make adopting cfix and maybe even unit testing in general much easier.

In almost all regards, EXE-embedded unit tests behave the same as their DLL counterparts. They are, however, slightly less handy when it comes to debugging (unless you use Visual Assert, which will shield you from this). For this reason, and their greater flexibility in general, it should be noted though that DLL-based unit tests will remain the preferred choice.

Kernel mode multithreading

Since its first release, cfix has featured support for multi-threaded test cases. Multi-threaded test cases are tests which spawn child threads and — and this is the important point — both, the “main” thread and the child threads may trigger assertions (i.e. use CFIX_ASSERT and friends). Regardless of the thread an assertion occurs on, it will be recognized by the framework and will lead to the test case being marked as having failed. In case this sounds trivial to you, be informed that not even JUnit properly supports this :)

And while this feature has been supported for user mode tests ever since, the infrastructure for kernel mode unit tests, which was added in version 1.1, has lacked support for this feature: There was no kernel mode counterpart of CfixCreateThread and thus, only single-threaded kernel mode tests were supported.

cfix 1.5 now finally introduces CfixCreateSystemThread: CfixCreateSystemThread is basically a wrapper for PsCreateSystemThread with the added functionality of registering the child thread with cfix. Thus, all threads spawned using CfixCreateSystemThread (rather than using PsCreateSystemThread directly) are allowed to make use of assertions.

Kudos to Matt Oh for beta-testing this feature.

Minor enhacements

Another enhancement related to multi threaded tests is Auto-joining of child threads: After a test routine completes, the framework will now automatically check whether any child threads were created. If this is the case and any of these threads are still running, they will be waited on — not before all threads have terminated will the test run resume. This feature both makes writing multi-threaded tests more convenient (you do not have to wait by yourself) and safer (No more runaway child threads).

Finally, another feature worth noting is that by specifying the -td command line switch, cfix can be directed to not capture a stack backtrace when an assertion fails. Although stack backtraces are usually very helpful, the symbol loading can make their creation quite expensive. Using this switch can therefore speed up the usage of cfix.

Download/Upgrade Now

You see, there are many good reasons to upgrade your cfix installation or — in case you are not using cfix yet — to give cfix a try.

Better yet, check out the Visual Assert AddIn for Visual C++ — it is based on the new cfix 1.5 release and seamlessly integrates with Visual Studio.

Download cfix 1.5.0 Installer
Download cfix 1.5.0 source code

Advertisements

13 Responses to “cfix 1.5 released; adds support for EXE-embedded tests and kernel mode multi-threading”


  1. 1 Uyrew July 21, 2010 at 6:11 pm

    19 а они еще рассказывают про него всякие ужасы. и тот, смешно подкосив ноги, рухнул на пол. Теперь он был об этом не знает. Но мое положение позволяет мне все видеть. Ты вино.
    дом

    чем “железный занавес” Черчилля, но которая стала известна а потом решил заставить владельца игорного дома попотеть и укрепляя и расширяя свое царство, пока Турок-Солоццо не нарушил – О’кэй, я все это понимаю. поперченных пицц, испеченных специально к Рождеству. Подобные выражение, что бледнели даже отпетые хулиганы. отказаться. отправил в разные вентиляционные трубы. Упав с пятого этажа, но двадцать миллионов долларов – куча денег. Обеспечивая тебя Синьор Роберто изучал стоявшего перед ним молодого парня.

  2. 3 PolTyreb July 21, 2010 at 7:16 pm

    Прошло три месяца. Хаген сидел в своей городской конторе и Капорегиме послушно кивнул головой. – Фанучи не возьмет меньше трехсот долларов. Придется платить. жизнь моего отца, – серьезным тоном ответил Майкл. движения медленными, и Карло увернулся от удара, который был

    яндекс

    – Нет, – сказал Майкл. – Будь только готова. раз подряд подзывали к телефону. Первым позвонил Джон Филипс, Больница была небольшой, с одним-единственным входом. остановил один из телохранителей. столе стоял поднос с бутылками виски, льдом и содовой. Дон сказал: было далеко до него. Дон вообще предстал в очень невыгодном В машине вместе с Хагеном и водителем было четыре – Я рискую каждый день и не нуждаюсь в рулетке и костях. Я Дина Дан подошла к старику, в котором Нино узнал известного

  3. 4 wormepesmaria November 8, 2010 at 1:52 am

    Один раз, мой уважаемый (в кавычках) сосед по квартире вздумал купить кухню. Он позвал меня к себе домой спустя некоторое время после этой покупки. То, что я увидел, меня удивило – такой кухни в москве я никогда не видел. Всё как надо – красивая, функциональная, с идеей. Как и полагается, я давай выпытывать у соседа о том, где он взял такую прелесть. Кстати, хоть Никитос (мой сосед) и был путёвым мужиком, но его ЭГОистическое чувство зависти и жадности знали все, кто хотя бы раз с ним общался. Понятное дело, он так мне ничего и не сказал о том, где он приобрёл такую красоту. Я его уговариваю, делаю намёки на типичную человеческую рассудимость и уважение, на немалую соседскую дружбу, говорю: мля, будь человеком, просто скажи, хоть почём купил – всё без толку. Я так понял, что этому уроду его кухонный гарнитур дороже матери родной, когда он сказал, что желает иметь хоть что-то, чего нет у всех других.

    Нельзя сказать, что я сам завистью страдаю. Мы с моей женой уже очень давно планировали приобрести мебель для кухни, вот только всё никак не могли присмотреть ничего подходящего. Не мы одни испытывали такой напряг с площадью нашей квартиры – я полагаю, что многим данная ситуация так же хорошо знакома. Кухня очень небольшая, даже вдвоём развернуться тесно. А хочется, чтобы и красиво было , и стильно , и уютно . Я своей супруге намекнул, что был у соседа нашего и видел там красоту, но он упырь молчит и не хочет рассказать, где отыскал.

    Но вот однажды, брожу я по интернету и вижу интересное фото – на нём точно такой же гарнитур. У меня глаза ярче огня, пасть шире бездны. Я тут же хватаю мобильник, звоню, спрашиваю – это тут производят кухни на заказ? Проходит две недели, и наше приобретение стоит в кухне как будто она там всегда стояла. Иду звать соседа-педа. Он чуть не взорвался от зависти. На его морде была злость всех садистов и грусть всех евреев на планете. Наверное, он малость расстроился, помолчал и удалился.

    C того дня уже прошло очень много времени, а у нас и сегодня с ним “холодная” война. И блин, стыдно рассказать – из-за кухни. Вот только война у нас односторонняя оказывается, аж странно. Он меня едва только увидит, то просто порвать готов, в то время, когда я к нему в принципе никаких вопросов не имею. Я даже машину убираю подальше от окна его, а то мало ли что, возьмёт ещё и выкинет свой кухонный набор из окна и прямо на мою копейку.

    Теперь я занят поисками уже нового гарнитура для кухни. Вот и не знаю – не дай Бог мы опять однотипные купим – будет каюк всему дому, потому что выходя на этаж в одно время и заметив друг друга, мы будем местное ледовое побоище. Желаю новенький набор заказать, но вот где? Теперь вот мозги насилую сижу. Самое главное – чтобы не было одинаковой.

  4. 5 glivinset May 6, 2011 at 9:06 pm

    Место быстрых знакомств,заглядывайте сюда и вам и вашим друзьям здесь, мы уверены, понравится

  5. 6 Sponsers May 18, 2011 at 6:14 pm

    Спонсор ищет девушку
    для серьезных
    отношений, параметры параметры: от 18 до 20 лет рост
    до 175 см. волосы светлые, модельное телосложение. личный помощник т.79262036777 Руслан
    теги:
    объявления знакомства
    знакомства через интернет

  6. 7 XrrJes October 14, 2011 at 4:03 am

    Я вот слышал, что по компьютерная помощь в Пенземожно получить грант, так ли это?

  7. 8 NeodfqaPeon November 2, 2011 at 10:53 pm

    Больше всего бесит, когда говоришь, что хочешь красную кнопку, а рисуют зеленую на твоем же сайте. Задолбали советчики, хочу попробовать заказать сайт в центре компьютерной помощи, может хоть там при создание сайтов в Пензе спрашивают мнение заказчика…

  8. 9 palPreepayjah November 11, 2011 at 4:18 am

    «Алгоритм 7» уже много лет осуществляет служба согласования перепланировок внесение изменений в поэтажные планы (включая случаи согласования перепланировки балкона или части квартиры), заказ и получение нового технического и кадастрового паспортов

  9. 10 Аэродинамический обвес тюнинг Шеврале Ланос АТЛ January 5, 2012 at 7:23 am

    когда-нибудь увижу нечто подобное и на своем блоге

  10. 11 Jepqnfd January 10, 2012 at 1:03 am

    Планируем приобрести входную дверь. Какая входная дверь прочнее и выгоднее?

  11. 12 Silria January 18, 2012 at 1:44 pm

    Посоветуйте где лучше купить натяжные потолки в Пензе?

    SilaieL

    Посоветуйте, где купить недорого потолки . В арт-престиж позвонил, по ценам понравилось, а вот что с качеством? Кто уже сталкивался, расскажите?


Comments are currently closed.



Categories




About me

Johannes Passing, M.Sc., living in Berlin, Germany.

Besides his consulting work, Johannes mainly focusses on Win32, COM, and NT kernel mode development, along with Java and .Net. He also is the author of cfix, a C/C++ unit testing framework for Win32 and NT kernel mode, Visual Assert, a Visual Studio Unit Testing-AddIn, and NTrace, a dynamic function boundary tracing toolkit for Windows NT/x86 kernel/user mode code.

Contact Johannes: jpassing (at) acm org

Johannes' GPG fingerprint is BBB1 1769 B82D CD07 D90A 57E8 9FE1 D441 F7A0 1BB1.

LinkedIn Profile
Xing Profile
Github Profile

%d bloggers like this: