Гибридная Графовая База Данных (отвертка с моторчиком для моделирования моделей)
День 9. Доработка тестов и планы на будущее.
Это конечно не полноценные юниттесты с 146% кавереджем, но лучше чтобы основная функциональность постоянно тестировалась, чем не тестировалась и разводила в своих внутренностях регрессии. Помимо вышеупомянутых тестов для некоторых вспомогательных модулей, добавлены тесты для операций с узлами данных (добавление, редактирование, удаление), а также тесты для линков и индексов.
Весь код из локального репозитория закачан на гитхаб (
https://github.com/norian-n/nekodb).
Дальнейшие шаги: демо приложение для обкатки двигла на как бы практических задачах, добавление требуемой для этого приложения функциональности и рефакторинг понаписанного. Рефакторинг является необходимым методом для повышения качества софта. Он направлен на уменьшение количества кода и перенос дополнительной функциональности в отдельные плагины, чтобы в основных модулях оставалась только самая необходимая функциональность в самом рациональном виде. Это постоянный итеративный процесс небольших изменений, который заканчивается только с гибелью системы под собственной тяжестью.
Процесс сборки всего и запуска тестов выглядит так:
> ./all_tests.sh
============ build lib and test apps ============
g++ -fPIC -std=c++20 -c service/egByteArray.cpp -o service/egByteArray.o
g++ -fPIC -std=c++20 -c nodes/egDataNodesType.cpp -o nodes/egDataNodesType.o
g++ -fPIC -std=c++20 -c nodes/egDataNodesLocalFile.cpp -o nodes/egDataNodesLocalFile.o
g++ -fPIC -std=c++20 -c nodes/egDataNodesContainer.cpp -o nodes/egDataNodesContainer.o
g++ -fPIC -std=c++20 -c nodes/egDataNodeBlueprint.cpp -o nodes/egDataNodeBlueprint.o
g++ -fPIC -std=c++20 -c nodes/egDataNode.cpp -o nodes/egDataNode.o
g++ -fPIC -std=c++20 -c indexes/egIndexes.cpp -o indexes/egIndexes.o
g++ -fPIC -std=c++20 -c indexes/egIndexConditions.cpp -o indexes/egIndexConditions.o
g++ -fPIC -std=c++20 -c indexes/egFingers.cpp -o indexes/egFingers.o
g++ -fPIC -std=c++20 -c links/egLinksType.cpp -o links/egLinksType.o
g++ -fPIC -std=c++20 -c links/egFlexLinksType.cpp -o links/egFlexLinksType.o
g++ -fPIC -std=c++20 -c metainfo/egLayersType.cpp -o metainfo/egLayersType.o
g++ -fPIC -std=c++20 -c metainfo/egDatabaseType.cpp -o metainfo/egDatabaseType.o
g++ -shared -o libegdb.so service/egByteArray.o nodes/egDataNodesType.o nodes/egDataNodesLocalFile.o nodes/egDataNodesContainer.o nodes/egDataNodeBlueprint.o nodes/egDataNode.o indexes/egIndexes.o indexes/egIndexConditions.o indexes/egFingers.o links/egLinksType.o links/egFlexLinksType.o metainfo/egLayersType.o metainfo/egDatabaseType.o
=============== Finished compilation of libegdb.so ===============
-rwxrwxr-x 1068760 libegdb.so
=============== clean ===============
rm -f service/egByteArray.o nodes/egDataNodesType.o nodes/egDataNodesLocalFile.o nodes/egDataNodesContainer.o nodes/egDataNodeBlueprint.o nodes/egDataNode.o indexes/egIndexes.o indexes/egIndexConditions.o indexes/egFingers.o links/egLinksType.o links/egFlexLinksType.o metainfo/egLayersType.o metainfo/egDatabaseType.o
g++ -std=c++20 -c tests/testDataNodesLocalFile.cpp -o tests/testDataNodesLocalFile.o
g++ tests/testDataNodesLocalFile.o -L. -legdb -o tests/testDataNodesLocalFile.exe
g++ -std=c++20 -c tests/testFlexLinks.cpp -o tests/testFlexLinks.o
g++ tests/testFlexLinks.o -L. -legdb -o tests/testFlexLinks.exe
g++ -std=c++20 -c tests/testGeneralOps.cpp -o tests/testGeneralOps.o
g++ tests/testGeneralOps.o -L. -legdb -o tests/testGeneralOps.exe
g++ -std=c++20 -c tests/testDataNodesContainer.cpp -o tests/testDataNodesContainer.o
g++ tests/testDataNodesContainer.o -L. -legdb -o tests/testDataNodesContainer.exe
g++ -std=c++20 -c tests/testIndexesUsage.cpp -o tests/testIndexesUsage.o
g++ tests/testIndexesUsage.o -L. -legdb -o tests/testIndexesUsage.exe
g++ -std=c++20 -c tests/testDataNodeBlueprint.cpp -o tests/testDataNodeBlueprint.o
g++ tests/testDataNodeBlueprint.o -L. -legdb -o tests/testDataNodeBlueprint.exe
g++ -std=c++20 -c tests/testFingers.cpp -o tests/testFingers.o
g++ tests/testFingers.o -L. -legdb -o tests/testFingers.exe
g++ -std=c++20 -c tests/testBasicOps.cpp -o tests/testBasicOps.o
g++ tests/testBasicOps.o -L. -legdb -o tests/testBasicOps.exe
g++ -std=c++20 -c tests/testLinks.cpp -o tests/testLinks.o
g++ tests/testLinks.o -L. -legdb -o tests/testLinks.exe
g++ -std=c++20 -c tests/testIndexes.cpp -o tests/testIndexes.o
g++ tests/testIndexes.o -L. -legdb -o tests/testIndexes.exe
g++ -std=c++20 -c tests/testDataFields.cpp -o tests/testDataFields.o
g++ tests/testDataFields.o -L. -legdb -o tests/testDataFields.exe
g++ -std=c++20 -c tests/testLayers.cpp -o tests/testLayers.o
g++ tests/testLayers.o -L. -legdb -o tests/testLayers.exe
tests/testDataNodesLocalFile.exe tests/testFlexLinks.exe tests/testGeneralOps.exe tests/testDataNodesContainer.exe tests/testIndexesUsage.exe tests/testDataNodeBlueprint.exe tests/testFingers.exe tests/testBasicOps.exe tests/testLinks.exe tests/testIndexes.exe tests/testDataFields.exe tests/testLayers.exe
=============== Finished compilation of tests ===============
rm -f tests/testDataNodesLocalFile.o tests/testFlexLinks.o tests/testGeneralOps.o tests/testDataNodesContainer.o tests/testIndexesUsage.o tests/testDataNodeBlueprint.o tests/testFingers.o tests/testBasicOps.o tests/testLinks.o tests/testIndexes.o tests/testDataFields.o tests/testLayers.o
rm -f tests/*.o
rm -f *.o
============ run test apps ============
initDatabase() not found metadata storage, create new: egNodesTypesMetainfo
initDatabase() not found metadata storage, create new: egLinksTypesMetainfo
initDatabase() not found metadata storage, create new: egLayersTypesMetainfo
===== Test basic database ops =====
PASS
===== Test length convertor ( 123456789 ) =====
byteCountIn: 4 byteCountOut: 4 testLength: 123456789
===== Test hamSlicer =====
PASS
===== Test DataNodeBlueprint (2 errors must appear in negative tests) =====
ERROR: AddIndex() for DataNodeBlueprint: "testNodes" field name "bad index name" not found
ERROR: Can't add field "try to add field after commit" to DataNodeBlueprint: "testNodes". Call BlueprintInitStart() first
PASS
===== Test NodesContainerType =====
PASS
===== Test egDataNodeLocalFile =====
PASS
===== Test EgFingers Stage 1 =====
PASS
===== Test EgFingers Stage 2 =====
PASS
===== Test EgFreeLinksType =====
PASS
===== Test general database ops =====
PASS
===== Test EgIndexes =====
PASS
===== Test indexes ops =====
PASS
===== Test EgLayersType =====
PASS
===== Test EgLinksType =====
PASS
PASS total: 13
FAIL total: 0