batch_processor_test.go

Обзор

Файл batch_processor_test.go содержит модульные и бенчмарк-тесты для компонента пакетной обработки игровых действий — BatchProcessor. Основная цель тестов — проверить корректность создания, добавления действий в пакет, валидации, генерации и подписи пакетов, а также обработку ошибок и повторные попытки отправки неудачных пакетов.

Данный файл предназначен для обеспечения качества и стабильности логики пакетной обработки игровых событий в рамках игровой системы, взаимодействующей с блокчейном Ethereum и смарт-контрактами.


Содержимое файла и описание функций

Все тесты используют пакет testing и testify/assert для удобной проверки результатов.


Тесты конструктора и конфигурации

TestNewBatchProcessor(t *testing.T)

Проверяет создание нового экземпляра BatchProcessor с заданной конфигурацией.


Тесты добавления игровых действий

TestBatchProcessor_AddAction(t *testing.T)

Проверяет метод AddAction:


TestBatchProcessor_AddActionToBatch(t *testing.T)

Тестирует внутренний метод addActionToBatch:


Тесты валидации и генерации пакетов

TestBatchProcessor_ValidateBatch(t *testing.T)


TestBatchProcessor_GenerateBatchID(t *testing.T)


TestBatchProcessor_CreateBatchData(t *testing.T)


Тесты подписи данных пакета

TestBatchProcessor_SignBatchData(t *testing.T)

TestBatchProcessor_SignBatchDataNoKey(t *testing.T)


Тесты обработки ошибок и повторных попыток

TestBatchProcessor_HandleFailedBatch(t *testing.T)

TestBatchProcessor_HandleFailedBatchMaxRetries(t *testing.T)


Бенчмарки производительности

В каждом бенчмарке создаётся типичный набор данных и измеряется время выполнения ключевых методов.


Важные детали реализации и алгоритмы


Взаимодействие с другими частями системы


Визуальная диаграмма: Структура тестируемого BatchProcessor

flowchart TD
    A[BatchProcessor] --> B[AddAction(action)]
    A --> C[addActionToBatch(ctx, action)]
    C --> D{Текущий размер пакета < MaxBatchSize?}
    D -- Да --> E[Добавить действие в currentBatch]
    D -- Нет --> F[Обработать пакет (processBatch)]
    A --> G[ValidateBatch(batch)]
    A --> H[GenerateBatchID()]
    A --> I[CreateBatchData(batchID, actions, playerStates)]
    A --> J[SignBatchData(data)]
    A --> K[HandleFailedBatch(ctx, batchResult)]
    K --> L{RetryCount < MaxRetries?}
    L -- Да --> M[Добавить действие в очередь для повтора]
    L -- Нет --> N[Отбросить действие]

Пример использования (из тестов)

gameEngine := NewGameEngine()
config := BatchProcessorConfig{
    MaxBatchSize: 10,
    BatchTimeout: 5 * time.Second,
    MaxRetries:   3,
    RetryDelay:   1 * time.Second,
    ValidatorKey: make([]byte, 32),
    NetworkID:    "test-network",
}

bp := NewBatchProcessor(gameEngine, nil, nil, config)

action := GameActionEvent{
    ChainID:   1,
    ActionID:  [32]byte{1, 2, 3},
    Action: contracts.GameManagerGameAction{
        Player:     common.HexToAddress("0x1234567890123456789012345678901234567890"),
        ActionType: 0,
        ManaAmount: big.NewInt(100),
    },
    Timestamp: time.Now(),
}

err := bp.AddAction(action)
if err != nil {
    log.Fatalf("Failed to add action: %v", err)
}

Данная документация описывает тесты и ключевые аспекты BatchProcessor, обеспечивающего пакетную обработку игровых событий с надёжностью, валидацией и интеграцией с Ethereum.