O0oO0Oo / Coin

비트코인 프로젝트 리팩토링
1 stars 0 forks source link

feat: implement unit tests for price module #5

Closed O0oO0Oo closed 11 months ago

O0oO0Oo commented 11 months ago

이슈 개요

price 모듈이 thread-safe 테스트를 작성합니다.

재현 단계

작성 테스트 코드

예상 동작

테스트 코드의 동작

실제 동작

테스트 코드의 동작

추가 정보

Non-Thread-safe 자료구조 사용시 테스트 결과

public class PriceMessageBlockingQueue implements MessageQueue<PriceMessageProduceEvent, CryptoCoin> {
    private HashMap<String, PriorityQueue<CryptoCoin>> priceHashMapPriorityQueue = new HashMap<>();

image

테스트를 통해 발견된 에러 처리 1

    private int getCoinsIndex() {
        return coinsIndex.getAndAccumulate(
                1,
                (current, update) -> {
                    if (current < coins.size() - 1) {
                        return current + update;
                    }
                    return 0;
                });
    }

thread-safe 하지만 인덱스가 넘어가는 부분을 수정.

PriceApiRequestFailureEventListener 변경

        if (!isFailure) {
            failureCount.decrementAndGet();
            failureCount.compareAndSet(-1, 0);
        }

        if (failureCount.get() == maxFailures) {
            log.error("Price request module reached max failures");
            // TODO : 가격데이터를 불러올 수 없으므로 거래를 진행할 수 없어 거래 등록 서비스가 중지되게 해야함
            return;
        }

        if (isFailure) {
            failureCount.incrementAndGet();
        }