Skip to content

cyberok-org/cyber-utbot-api

Repository files navigation

cyber-utbot-api

Abstract

UTBot - UnitTestBot is the tool for automated unit test generation and precise code analysis.

cyber-utbot-api - обёртка над utbot, позволяющая запускать его из кода.

Она работает по аналогии с utbot-cli, в ней отдельно вынесены настройки для cli, можно задать настройки самого utbot внутри.

Основная функциональность: генерирует тесты для уязвимостей (какие именно зависит от базы знаний), работает аккуратнее и лучше в некоторых специфичных местах (например есть встроенная улучшенная поддержка javax.servlet)

Build

Следующее работало с версией gradle 7.2, с более старыми версиями не проверялось, может что-то не собраться.

git clone https://github.com/UnitTestBot/UTBotJava
cd UTBotJava/
git checkout fe0b89c789da5559bf8912e0179cdcee026e6137
git clone https://github.com/cyberok-org/cyber-utbot-api
cd cyber-utbot-api/

После стоит открыть ide (на проекте cyber-utbot-api) и попытаться собрать (gradle build -x test если не начнётся автоматически). Потом применить patch командной ниже и ещё раз собрать.

cd scripts/
bash patch_apply.sh

Дальше всё собирается командой (есть внутренние тесты для примеров которые и должны падать)

gradle build -x test

(Возможно нужно будет предварительно сконфигурировать проект (load gradle changes, если будет иконка справа сверху))

Knowledge base

Для проекта есть база знаний (приватная), её можно тоже склонировать, если есть доступ (cyber-utbot-exploit-base).

Run

Fast start

Запустить main в Simple.

Simple

Simple - main с которого можно из кода запускать utbot (упрощенный, для демонстрации)

VulnerabilityChecker - тот же пример что и в Simple с использованием extraVulnerabilityChecks и явным заданием базы знаний из кода.

Main

Application - main с которого можно из кода запускать utbot.

ReportCreator - заготовка для запуска бенчмарков.

Generator, ConstraintsViewer - Другой способ, возможно более удобный, делать это через тесты.

Запуск в общем случае:

  • Предварительно стоит добавить эти VM options в конфигурацию запуска.

    -Xmx1536M
    --add-opens=java.base/java.lang=ALL-UNNAMED
    --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
    --add-opens=java.base/java.io=ALL-UNNAMED
    --add-opens java.base/java.util=ALL-UNNAMED
    --add-opens java.base/java.nio.file=ALL-UNNAMED
    --add-opens java.base/sun.nio.fs=ALL-UNNAMED
    --add-opens java.base/java.nio.file.spi=ALL-UNNAMED
    --add-opens java.desktop/sun.awt=ALL-UNNAMED
    --add-opens java.base/java.nio.charset=ALL-UNNAMED
    --add-opens java.base/java.lang=ALL-UNNAMED
    --add-opens java.base/java.lang.ref=ALL-UNNAMED
    --add-opens java.base/java.lang.invoke=ALL-UNNAMED
    --add-opens java.base/sun.security.util=ALL-UNNAMED
    --add-opens java.logging/java.util.logging=ALL-UNNAMED
    --add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED
    --add-opens java.base/java.net=ALL-UNNAMED
    --add-opens java.base/sun.util.calendar=ALL-UNNAMED
    --add-exports=java.base/sun.nio.ch=ALL-UNNAMED
    --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
    --add-exports=java.base/sun.nio.ch=ALL-UNNAMED
    --add-exports=java.base/sun.nio.fs=ALL-UNNAMED
    --add-exports=java.base/sun.nio.cs=ALL-UNNAMED
    
  • Заменить переменную classpath (там должен быть build текущего проекта (build/classes/java/main), build тестируемого проекта (например /home/andrew/ex/build/classes/java/main) и пути до нужных jar (например /home/andrew/.jdks/openjdk-17.0.2/bin/javax.servlet-api-3.1.0.jar))

  • Выбрать нужную базу и задать настройки. В настройках запуска - классе GenerateTestsSettings можно указать путь до базы знаний в vulnerabilityCheckDirectories. Application настроен на (cyber-utbot-exploit-base). Дефолтно задана база для примера

  • Запустить (например Application)

Details

Подробнее про формат проверок можно почитать тут

Cli

Так же можно собрать cli и использовать его. Это можно сделать командой gradle jar.

Замечание: не стоит запускать на файлах, пути которых полностью совпадают с путями из этого репозитория (баг). Это выдаёт подобную ошибку java.lang.Exception: Error: The path '/home/andrew/UTBot/UTBotJava/cyber-utbot-api/file:/home/andrew/UTBot/UTBotJava/cyber-utbot-api/build/libs/cyber-utbot-api-2023.05-SNAPSHOT.jar!' is neither file nor directory

Docs

brief - доки по всему. Там есть описания для:

  • cyberok.api - доки по настройкам, стандарту базы знаний и механизму проверки.
  • cyberok.test - доки по спецификации тестов (формат хранения), концепция приложения для сравнения разных инструментов/версий одного инструмента.
  • utbot - внутренние доки по utbot, utbot scheme - схема работы utbot
  • abstract - что-то отдельное, не относящаяся к теме, но полезное при изучении.

Tests

testcases - папка с примерами (запускается на utbot).

test - папка с результатами запуска тестов.

testcasesGen - папка c примерами в предполагаемом формате хранения. Спецификация формата хранения - test format (текущие примеры пока не удовлетворяют требованием спецификации).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages