* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.
상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 
https://hyperledger.github.io/composer/latest/business-network/testing

 

Testing Business Networks | Hyperledger Composer

Testing Business Networks Hyperledger Composer supports three types of testing: interactive testing, automated unit testing and automated system testing. All three serve different purposes and are vital to ensuring the success of your blockchain projects.

hyperledger.github.io

하이퍼레저 컴포저는 세가지 유형의 테스팅을 지원한다. 반응형테스트, 자동화된 단위 테스트, 자동화된 시스템 테스트이다. 이 세가지는 모두 다른 목적을 가지고 있으며 블록체인 프로젝트의 성공을 보증하기 위한 필수요소이다.

비즈니스 네트워크 정의를 배포하고 나면 종종 배포가 올바르게 되었는지 확인하기 위해 반응형 "smoke test"를 하는 것이 유용하다. composer CLI는 이런 smoke test를 하는 몇몇 커맨드를 갖고 있다.

또 Docker Compose와 Mocha/Chai를 사용해 full-blown 시스템 테스트를 할 수도 있다. 이는 런타임을 시작하며 비즈니스 네트워크 정의를 배포하고 프로그래밍적으로 asset을 생성하고 transaction을 제출해 asset registry들의 상태를 조사한다.

단위테스트는 트랜잭션이 처리될 때 world-state에 대한 변화가 올바르게 이뤄지는지에 초점을 두고 있다.

단위테스트와 시스템테스트 모두 Jenkins, TravisCI, Circle CI 등과 같은 CI/CD build pipeline을 통해 자동화되어있다.

Interactive Testing

플레이그라운드를 사용해 참가자, 자산 생성 및 트랜잭션 제출을 반응형으로 테스트할 수 있다.

 

Testing from the Command Line

커맨드라인은 런타임 상태를 확인하고 트랜잭션을 제출하는데 사용할 수 있다. composer network list 커맨드를 사용해 asset과 participant registries의 상태를 볼 수 있고, composer transaction submit 커맨드를 통해 트랜잭션을 제출할 수 있다.

 

Creating Unit Tests

트랜잭션 처리 함수에 있는 비즈니스 로직은 100% 코드 커버리지에 속하기 때문에 단위 테스트를 해야만 한다. 이를 통해 비즈니스 로직 내 오타나 로직 오류가 없는지를 확인할 수 있다.

트랜잭션 처리 함수 내 비즈니스 로직에 대한 단위 테스트를 수행하기 위해 Mocha, Chai, Sinon, Istanbul 같은 JavaScript 테스팅 라이브러리를 사용할 수도 있다.

embedded 런타임은 단위 테스트에 매우 유용하다. 이는 하이퍼레저 패브릭을 켜지 않고 시뮬레이팅한 Node.js 블록체인 환경에서 비즈니스 로직을 빠르게 테스트할 수 있다.

단위 테스트용 샘플 네트워크는 아래를 참조

https://github.com/hyperledger/composer-sample-networks/blob/master/packages/bond-network/test/Bond.js

 

hyperledger/composer-sample-networks

Sample business network definitions for Composer. Contribute to hyperledger/composer-sample-networks development by creating an account on GitHub.

github.com

 

오랜만에 맘스터치를 방문했습니다.
언빌리버블버거 & 인크레더블 버거로 인기가 핫한 맘스터치!

오늘의 선택은 딥치즈버거 & 치킨커틀렛 버거

 딥치즈버거는 닭가슴살패티에 치즈가 추가되어
딥~한 맛을 즐길 수 있는(?) 버거입니다.

가격은
단품 4,000원 / 세트 6,000원 


영양성분
* (1일 영양소 기준치에 대한 비율)

※ 1회 제공량 : 220 g
※ 칼로리 : 409 kcal
※ 나트륨 : 737(37) mg
※ 당류 : 3 g
※ 포화지방 : 5(33) g
※ 단백질 : 28(51) g


사실 햄버거가 다 그렇듯 칼로리는 어마어마하지만
맛있으니까요ㅋㅋㅋㅋ

포장을 뜯으면 위와 같은 모습입니다.
닭가슴살의 뜨끈뜨끈한 온기에
치즈가 촉촉하게 흘러내려요~

맛은 맘스터치는 뭘 시켜도 기본은 보장되어 있으니까요.
개인적으로는 음.......사실
싸이버거가 더 맛있었어요>_< 
약~간....아주 약....간 느끼했습니다ㅠㅠ
목이 메였어요.

 

같이 간 친구는 치킨커틀렛버거를 주문했습니다.

통 가슴살 패티에 새콤달콤 커틀렛 소스와
아삭아삭 양배추채가 들어간 버거라고 하네요.

가격은 
단품 3,200원 / 세트 5,400원 


영양성분
* (1일 영양소 기준치에 대한 비율)

※ 1회 제공량 : 210 g
※ 칼로리 : 469 kcal
※ 나트륨 : 804(40) mg
※ 당류 : 8 g
※ 포화지방 : 4(27) g
※ 단백질 : 30(55) g


딥치즈버거보다 칼로리가 살~짝 높습니다.

포장을 뜯으니 아삭아삭 양배추채와
새콤달콤한 커틀렛 소스가 흘러나오고 있어요.

보너스로 맘스터치 하면 빠질 수 없는
감자튀김

 

* (오늘의 느낀점)

맘스터치는 맛있다. 신메뉴도 물론.
근데 싸이버거가 최강자인데는 이유가 있는듯(?)

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.
상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 
https://hyperledger.github.io/composer/latest/business-network/publishing-events

 

Emitting Events | Hyperledger Composer

Emitting Events Events can be emitted by Hyperledger Composer and subscribed to by external applications. Events are defined in the model file of a business network definition, and are emitted by transaction JavaScript in the transaction processor function

hyperledger.github.io

이벤트는 하이퍼레저 컴포저에 의해 발생할 수 있으며 외부 애플리케이션에 의해 구독될 수 있다. 이벤트는 비즈니스 네트워크 정의의 모델 파일에 정의되어 있고, 트랜잭션 처리 함수의 자바스크립트로 된 트랜잭션에 의해 발생한다. 이벤트를 발생시키는 코드는 트랜잭션 처리 함수 내부에 있지만, 이 코드가 실행될 때 이벤트가 발생되지는 않음에 주의하라. 대신에 이벤트는 트랜잭션이 커밋될 때마다 발생한다.

Before you begin

비즈니스 네트워크에 이벤트를 추가하기 전에 비즈니스 네트워크의 모델링 언어에 대한 이해도가 있어야 하며, 완전한 비즈니스 네트워크 정의를 구성하는 요소에 대해 알고 있어야 한다.

 

Procedure

1. 이벤트는 비즈니스 네트워크 정의의 모델 파일 (.cto) 에 정의되어 있고 asset과 participant도 동일하게 여기 있다. 이벤트는 다음 형태를 따른다.

event BasicEvent {
}

2. 이벤트가 발생하려면 이벤트를 생성하는 트랜잭션이 3개의 함수를 호출해야 한다. 첫 번재 함수는 getFactory 함수이다. getFactory함수는 이벤트가 트랜잭션의 일부로 생성되게 한다. 다음으로 이벤트는 factory.newEvent('org.namespace', 'BasicEvent') 를 사용해 생성되어야 한다. 이는 네임스페이스에 정의된 BasicEvent를 생성한다. 그리고나서 이벤트 요구속성들이 셋팅되어야 한다. 마지막으로 이벤트는 emit(BasicEvent)를 통해 발생한다. 이벤트를 호출하는 간단한 트랜잭션은 다음과 같다.

/**
 * @param {org.namespace.BasicEventTransaction} basicEventTransaction
 * @transaction
 */
async function basicEventTransaction(basicEventTransaction) {
    let factory = getFactory();

    let basicEvent = factory.newEvent('org.namespace', 'BasicEvent');
    emit(basicEvent);
}

이 트랜잭션은 비즈니스 네트워크 모델 파일에 정의된 BasicEvent 타입의 이벤트를 생성하고 발생시킨다. getFactory 함수에 대한 더 자세한 정보는 아래 링크를 참고하시오.

https://hyperledger.github.io/composer/latest/jsdoc/module-composer-runtime.html#getFactory

불러오는 중입니다...

 

+ Recent posts