SlideShare a Scribd company logo
POSTGRES 테스트 코드로 기여하기
발표자: 이동욱
이메일: sh95119@gmail.com
PGDay.Seoul 2022
마지막 업데이트: 2022.10.24
자기소개
현재 ’씨알에스 큐브’ 회사에서 재직중
GSoC’22 Completion Certificate of Contributor.
오픈소스 기여에 많은 관심을 가지고 있습니다.
이동욱 POSTGRES 테스트 코드로 기여하기
발표 내용
테스트 코드를 작성하면 무엇이 좋은지에 대해서 알아본다.
테스트 코드를 작성하는 방법과 테스트 코드의 종류에 대해서 알아본다.
작성한 테스트 코드를 제출하여 실제 소스코드에 반영하는 절차에 대해서
알아본다.
이동욱 POSTGRES 테스트 코드로 기여하기
1. 기여를 시작하는데 테스트 코드가 좋은 이유
이동욱 POSTGRES 테스트 코드로 기여하기
1. 기여를 시작하는데 테스트 코드가 좋은 이유
테스트 코드를 읽고 분석함으로써 프로그램의 기본 동작에 대해서 쉽게
익힐 수 있다.
코드를 분석하는 시나리오 및 방향성을 잡아준다.
코드를 작성함으로써 기여를 시도해 볼 수 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - contrib
POSTGRES 익스텐션이 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - src/bin
POSTGRES 도구들이 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - src/backend
메인 소스코드가 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류
테스트 코드 종류
1. SQL 테스트
2. TAP 테스트
3. SPEC 테스트
SQL 테스트는 SQL 문을 실행해서 나온 결과를 비교하는 테스트이다.
TAP 테스트는 Perl 의 Test::More 모듈을 이용하여 하는 테스트이다.
SPEC 테스트는 여러 세션을 이용하여 수행하는 테스트이다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
터미널에 ’make check’ 를 입력하면 sql 디렉터리 안에 있는 *.sql 파일이
실행된다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
pg_stat_statements.sql
CREATE EXTENSION pg_stat_statements;
--
-- simple and compound statements
--
SET pg_stat_statements.track_utility = FALSE;
SET pg_stat_statements.track_planning = TRUE;
SELECT pg_stat_statements_reset();
SELECT 1 AS "int";
SELECT ’hello’
-- multiline
AS "text";
...
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
pg_stat_statements.out
...
SELECT pg_stat_statements_reset();
pg_stat_statements_reset
--------------------------
(1 row)
SELECT 1 AS "int";
int
-----
1
(1 row)
SELECT ’hello’
-- multiline
AS "text";
text 이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - TAP 테스트
TAP 테스트는 Perl로 작성되어 있으며 t 디렉터리 안에 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. 테스트 코드의 종류 - TAP 테스트
pg_prewarm/t/001_basic.pl
...
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
...
$node->safe_psql("postgres",
"CREATE EXTENSION pg_prewarm;n"
. "CREATE TABLE test(c1 int);n"
. "INSERT INTO test SELECT generate_series(1, 100);");
# test read mode
my $result =
$node->safe_psql("postgres", "SELECT pg_prewarm(’test’, ’read’);");
like($result, qr/^[1-9][0-9]*$/, ’read mode succeeded’);
이동욱 POSTGRES 테스트 코드로 기여하기
3. 테스트 코드의 종류 - TAP 테스트
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
spec 테스트는 여러 세션간의 동작을 테스트하며 specs 디렉터리 안에 위
치한다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
setup {
CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int);
INSERT INTO multixact_conflict VALUES (1, 2), (3, 4);
}
teardown {
DROP TABLE multixact_conflict;
}
...
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
session s1
step s1_begin { BEGIN; }
step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; }
step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; }
step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; }
step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; }
step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; }
step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; }
step s1_commit { COMMIT; }
session s2
step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks(’multixact_conf
lict’); }
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit
permutation s1_begin s1_updatea s2_rowlocks s1_commit
permutation s1_begin s1_updateb s2_rowlocks s1_commit
# test multixact cases using savepoints
permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit
이동욱 POSTGRES 테스트 코드로 기여하기
4. 테스트 코드 작성이 처음이라면?
커버리지 사이트에서 테스트 커버리지가 적은 모듈을 선택해 테스트 코
드를 작성해보는 것을 추천
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
패치의 제목과 어떤 주제인지 토픽을 적는다 그리고 마지막에 메일을 보
냈을 때 생성된 쓰레드 ID를 기입하면 된다.
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
6. 테스트 코드를 작성하면서 배운 것들
디버깅 능력 및 도구에 대해서 배울 수 있다.
내부 구현에 대한 이해를 할 수 있다.
몰랐던 기능들 및 익스텐션에 대해서 알 수 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
7. 한 걸음 더 나아가기
PostgreSQL Person of the Week(https://postgresql.life/)
이동욱 POSTGRES 테스트 코드로 기여하기
8. 한 걸음 더 나아가기
이동욱 POSTGRES 테스트 코드로 기여하기
참고하면 좋을 링크
How (and why) to become a PostgreSQL contributor
How to create, test and debug an extension written in C for Post-
greSQL
POSTGRES 빌드 및 디버깅하는 방법
What is PostgreSQL commitfest and how to contribute
Reviewing a Patch
이동욱 POSTGRES 테스트 코드로 기여하기
이동욱 POSTGRES 테스트 코드로 기여하기

More Related Content

What's hot (20)

PDF
MariaDB 마이그레이션 - 네오클로바
NeoClova
 
PPTX
REST API 설계
Terry Cho
 
PDF
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
PgDay.Seoul
 
PDF
EDB Postgres DBA Best Practices
EDB
 
PPTX
Automate DBA Tasks With Ansible
Ivica Arsov
 
PPTX
mongodb와 mysql의 CRUD 연산의 성능 비교
Woo Yeong Choi
 
PPTX
Mongo DB 성능최적화 전략
Jin wook
 
PDF
Docker Advanced registry usage
Docker, Inc.
 
PPTX
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
HeeJung Hwang
 
PPTX
Introduction to PostgreSQL
Joel Brewer
 
PDF
RPC에서 REST까지 간단한 개념소개
Wonchang Song
 
PDF
[Pgday.Seoul 2020] SQL Tuning
PgDay.Seoul
 
PDF
PostgreSQL and RAM usage
Alexey Bashtanov
 
PDF
Modern c++ (C++ 11/14)
Geeks Anonymes
 
PDF
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB
 
PDF
MongoDB Fundamentals
MongoDB
 
PDF
[2018] MySQL 이중화 진화기
NHN FORWARD
 
PDF
MySQL Administrator 2021 - 네오클로바
NeoClova
 
PDF
Dockerを利用したローカル環境から本番環境までの構築設計
Koichi Nagaoka
 
PPTX
Introduction to Docker
Pubudu Jayawardana
 
MariaDB 마이그레이션 - 네오클로바
NeoClova
 
REST API 설계
Terry Cho
 
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
PgDay.Seoul
 
EDB Postgres DBA Best Practices
EDB
 
Automate DBA Tasks With Ansible
Ivica Arsov
 
mongodb와 mysql의 CRUD 연산의 성능 비교
Woo Yeong Choi
 
Mongo DB 성능최적화 전략
Jin wook
 
Docker Advanced registry usage
Docker, Inc.
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
HeeJung Hwang
 
Introduction to PostgreSQL
Joel Brewer
 
RPC에서 REST까지 간단한 개념소개
Wonchang Song
 
[Pgday.Seoul 2020] SQL Tuning
PgDay.Seoul
 
PostgreSQL and RAM usage
Alexey Bashtanov
 
Modern c++ (C++ 11/14)
Geeks Anonymes
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB
 
MongoDB Fundamentals
MongoDB
 
[2018] MySQL 이중화 진화기
NHN FORWARD
 
MySQL Administrator 2021 - 네오클로바
NeoClova
 
Dockerを利用したローカル環境から本番環境までの構築設計
Koichi Nagaoka
 
Introduction to Docker
Pubudu Jayawardana
 

Similar to [pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱 (20)

PDF
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PgDay.Seoul
 
PDF
개발이 테스트를 만났을 때(Shift left testing)
SangIn Choung
 
PDF
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
SangIn Choung
 
PDF
테스트개선지원 사례 - 웹어플리케이션대상
SangIn Choung
 
PDF
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Jaeman An
 
PDF
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
 
PDF
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
Kenneth Ceyer
 
PDF
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang
 
PDF
테스트가 뭐예요?
Kyoung Up Jung
 
PDF
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul
 
PDF
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
용근 권
 
PPTX
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
PDF
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk
 
PPTX
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
ultrasuperrok
 
PDF
SI 화면테스트(단위) 가이드
SangIn Choung
 
PDF
Effective Unit Testing
Yeon Soo Kim
 
PDF
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
tobeware
 
PDF
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi
 
PDF
POSTGRES_사칙연산_익스텐션만들기.pdf
Lee Dong Wook
 
PPTX
리펙토링 4장 테스트만들기
Heo Seungwook
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PgDay.Seoul
 
개발이 테스트를 만났을 때(Shift left testing)
SangIn Choung
 
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
SangIn Choung
 
테스트개선지원 사례 - 웹어플리케이션대상
SangIn Choung
 
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Jaeman An
 
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
Kenneth Ceyer
 
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang
 
테스트가 뭐예요?
Kyoung Up Jung
 
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul
 
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
용근 권
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk
 
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
ultrasuperrok
 
SI 화면테스트(단위) 가이드
SangIn Choung
 
Effective Unit Testing
Yeon Soo Kim
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
tobeware
 
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi
 
POSTGRES_사칙연산_익스텐션만들기.pdf
Lee Dong Wook
 
리펙토링 4장 테스트만들기
Heo Seungwook
 
Ad

More from PgDay.Seoul (20)

PDF
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
PgDay.Seoul
 
PDF
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] Advanced FDW
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] replacing oracle with edb postgres
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul
 
PDF
PostgreSQL 9.6 새 기능 소개
PgDay.Seoul
 
PDF
pg_hba.conf 이야기
PgDay.Seoul
 
PDF
Pgday bdr 천정대
PgDay.Seoul
 
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
PgDay.Seoul
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
PgDay.Seoul
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
PgDay.Seoul
 
[Pgday.Seoul 2019] Advanced FDW
PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PgDay.Seoul
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
PgDay.Seoul
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PgDay.Seoul
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
PgDay.Seoul
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
PgDay.Seoul
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
PgDay.Seoul
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PgDay.Seoul
 
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
PgDay.Seoul
 
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
PgDay.Seoul
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
PgDay.Seoul
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul
 
PostgreSQL 9.6 새 기능 소개
PgDay.Seoul
 
pg_hba.conf 이야기
PgDay.Seoul
 
Pgday bdr 천정대
PgDay.Seoul
 
Ad

[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱

  • 1. POSTGRES 테스트 코드로 기여하기 발표자: 이동욱 이메일: [email protected] PGDay.Seoul 2022 마지막 업데이트: 2022.10.24
  • 2. 자기소개 현재 ’씨알에스 큐브’ 회사에서 재직중 GSoC’22 Completion Certificate of Contributor. 오픈소스 기여에 많은 관심을 가지고 있습니다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 3. 발표 내용 테스트 코드를 작성하면 무엇이 좋은지에 대해서 알아본다. 테스트 코드를 작성하는 방법과 테스트 코드의 종류에 대해서 알아본다. 작성한 테스트 코드를 제출하여 실제 소스코드에 반영하는 절차에 대해서 알아본다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 4. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 이동욱 POSTGRES 테스트 코드로 기여하기
  • 5. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 테스트 코드를 읽고 분석함으로써 프로그램의 기본 동작에 대해서 쉽게 익힐 수 있다. 코드를 분석하는 시나리오 및 방향성을 잡아준다. 코드를 작성함으로써 기여를 시도해 볼 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 6. 2. POSTGRES 프로젝트 구조 - contrib POSTGRES 익스텐션이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 7. 2. POSTGRES 프로젝트 구조 - src/bin POSTGRES 도구들이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 8. 2. POSTGRES 프로젝트 구조 - src/backend 메인 소스코드가 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 9. 3. PG 테스트 코드 종류 테스트 코드 종류 1. SQL 테스트 2. TAP 테스트 3. SPEC 테스트 SQL 테스트는 SQL 문을 실행해서 나온 결과를 비교하는 테스트이다. TAP 테스트는 Perl 의 Test::More 모듈을 이용하여 하는 테스트이다. SPEC 테스트는 여러 세션을 이용하여 수행하는 테스트이다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 10. 3. PG 테스트 코드 종류 - SQL 테스트 터미널에 ’make check’ 를 입력하면 sql 디렉터리 안에 있는 *.sql 파일이 실행된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 11. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.sql CREATE EXTENSION pg_stat_statements; -- -- simple and compound statements -- SET pg_stat_statements.track_utility = FALSE; SET pg_stat_statements.track_planning = TRUE; SELECT pg_stat_statements_reset(); SELECT 1 AS "int"; SELECT ’hello’ -- multiline AS "text"; ... 이동욱 POSTGRES 테스트 코드로 기여하기
  • 12. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.out ... SELECT pg_stat_statements_reset(); pg_stat_statements_reset -------------------------- (1 row) SELECT 1 AS "int"; int ----- 1 (1 row) SELECT ’hello’ -- multiline AS "text"; text 이동욱 POSTGRES 테스트 코드로 기여하기
  • 13. 3. PG 테스트 코드 종류 - TAP 테스트 TAP 테스트는 Perl로 작성되어 있으며 t 디렉터리 안에 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 14. 3. 테스트 코드의 종류 - TAP 테스트 pg_prewarm/t/001_basic.pl ... use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ... $node->safe_psql("postgres", "CREATE EXTENSION pg_prewarm;n" . "CREATE TABLE test(c1 int);n" . "INSERT INTO test SELECT generate_series(1, 100);"); # test read mode my $result = $node->safe_psql("postgres", "SELECT pg_prewarm(’test’, ’read’);"); like($result, qr/^[1-9][0-9]*$/, ’read mode succeeded’); 이동욱 POSTGRES 테스트 코드로 기여하기
  • 15. 3. 테스트 코드의 종류 - TAP 테스트 이동욱 POSTGRES 테스트 코드로 기여하기
  • 16. 3. PG 테스트 코드 종류 - SPEC 테스트 spec 테스트는 여러 세션간의 동작을 테스트하며 specs 디렉터리 안에 위 치한다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 17. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec setup { CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int); INSERT INTO multixact_conflict VALUES (1, 2), (3, 4); } teardown { DROP TABLE multixact_conflict; } ... 이동욱 POSTGRES 테스트 코드로 기여하기
  • 18. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec session s1 step s1_begin { BEGIN; } step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; } step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; } step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; } step s1_commit { COMMIT; } session s2 step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks(’multixact_conf lict’); } 이동욱 POSTGRES 테스트 코드로 기여하기
  • 19. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_updateb s2_rowlocks s1_commit # test multixact cases using savepoints permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit 이동욱 POSTGRES 테스트 코드로 기여하기
  • 20. 4. 테스트 코드 작성이 처음이라면? 커버리지 사이트에서 테스트 커버리지가 적은 모듈을 선택해 테스트 코 드를 작성해보는 것을 추천 이동욱 POSTGRES 테스트 코드로 기여하기
  • 21. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 22. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 23. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 24. 5. 코드를 제출하는 방법 패치의 제목과 어떤 주제인지 토픽을 적는다 그리고 마지막에 메일을 보 냈을 때 생성된 쓰레드 ID를 기입하면 된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 25. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 26. 6. 테스트 코드를 작성하면서 배운 것들 디버깅 능력 및 도구에 대해서 배울 수 있다. 내부 구현에 대한 이해를 할 수 있다. 몰랐던 기능들 및 익스텐션에 대해서 알 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 27. 7. 한 걸음 더 나아가기 PostgreSQL Person of the Week(https://postgresql.life/) 이동욱 POSTGRES 테스트 코드로 기여하기
  • 28. 8. 한 걸음 더 나아가기 이동욱 POSTGRES 테스트 코드로 기여하기
  • 29. 참고하면 좋을 링크 How (and why) to become a PostgreSQL contributor How to create, test and debug an extension written in C for Post- greSQL POSTGRES 빌드 및 디버깅하는 방법 What is PostgreSQL commitfest and how to contribute Reviewing a Patch 이동욱 POSTGRES 테스트 코드로 기여하기
  • 30. 이동욱 POSTGRES 테스트 코드로 기여하기