Giter VIP home page Giter VIP logo

cyber-utbot-api's Introduction

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 (текущие примеры пока не удовлетворяют требованием спецификации).

cyber-utbot-api's People

Contributors

pogrebnoijak avatar

Stargazers

Aleksandr Kulikov avatar

Watchers

 avatar  avatar Alex Gluck avatar Abroskin Alexander avatar Ekaterina Shemetova avatar

Forkers

olesiasub

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.