Skip to content

Commit

Permalink
Merge pull request #634 from isucon/feat/init_data
Browse files Browse the repository at this point in the history
動作確認用データの追加
  • Loading branch information
Yumeji Hattori authored Sep 9, 2021
2 parents 02da590 + f7b763f commit d83dcfe
Show file tree
Hide file tree
Showing 20 changed files with 151 additions and 2 deletions.
75 changes: 75 additions & 0 deletions benchmarker/generate/initialize.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package generate

import (
_ "embed"

"github.com/isucon/isucon11-final/benchmarker/model"
)

var (
initCourses []*model.Course
)

func init() {
// 動作確認用のアカウント
// ベンチではこのアカウントを操作することはないためUserAccountのみを管理する
testTeacher := &model.Teacher{
UserAccount: &model.UserAccount{
Code: "T99999",
Name: "isucon-teacher",
RawPassword: "isucon",
},
}

// course(in-progress/registration)の作成
// grade計算はclosedのコースのみ含まれないので学生を保持する必要はない
testCourse1 := model.NewCourse(
&model.CourseParam{
Code: "X00001",
Type: "major-subjects",
Name: "ISUCON演習第一",
Description: "この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。",
Credit: 1,
Teacher: "isucon-teacher",
Period: 0,
DayOfWeek: 0,
Keywords: "ISUCON SpeedUP",
}, "01FF4RXEKS0DG2EG20CWPQ60M3", testTeacher, 50)
testCourse1.SetStatusToInProgress()

testCourse2 := model.NewCourse(
&model.CourseParam{
Code: "X00002",
Type: "major-subjects",
Name: "ISUCON演習第二",
Description: "この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。",
Credit: 1,
Teacher: "isucon-teacher",
Period: 0,
DayOfWeek: 1,
Keywords: "ISUCON SpeedUP",
}, "01FF4RXEKS0DG2EG20CYAYCCGM", testTeacher, 50)
testCourse2.SetStatusToInProgress()

testCourse3 := model.NewCourse(
&model.CourseParam{
Code: "X00003",
Type: "major-subjects",
Name: "ISUCON演習第三",
Description: "この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。",
Credit: 1,
Teacher: "isucon-teacher",
Period: 0,
DayOfWeek: 2,
Keywords: "ISUCON SpeedUP",
}, "01FF4RXEKS0DG2EG20D23EQZRY", testTeacher, 50)

initCourses = []*model.Course{testCourse1, testCourse2, testCourse3}
}

// InitialCourses は初期に追加されているコースを返す
// Loadなどでは操作されることは想定されていないので検証のみで扱う
func InitialCourses() []*model.Course {
// 他の初期コースを追加する場合はここで追加する
return initCourses
}
5 changes: 5 additions & 0 deletions benchmarker/scenario/scenario.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ type Scenario struct {
loadRequestEndTime time.Time
debugData *DebugData

// initCourse は/initializeで追加されるコース
// 中のデータの更新はしないこと
initCourse []*model.Course

rmu sync.RWMutex

finishCoursePubSub *pubsub.PubSub
Expand Down Expand Up @@ -66,6 +70,7 @@ func NewScenario(config *Config) (*Scenario, error) {
activeStudents: make([]*model.Student, 0, initialStudentsCount),
debugData: NewDebugData(config.IsDebug),
finishCoursePubSub: pubsub.NewPubSub(),
initCourse: generate.InitialCourses(),
}, nil
}

Expand Down
5 changes: 4 additions & 1 deletion benchmarker/scenario/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ func (s *Scenario) validateCourses(ctx context.Context, step *isucandar.Benchmar

students := s.ActiveStudents()
expectCourses := s.CourseManager.ExposeCoursesForValidation()
for _, c := range s.initCourse {
expectCourses[c.ID] = c
}

if len(students) == 0 || len(expectCourses) == 0 {
return
Expand All @@ -203,7 +206,7 @@ func (s *Scenario) validateCourses(ctx context.Context, step *isucandar.Benchmar
_, nextPathParam = parseLinkHeader(hres)
}

if len(expectCourses) != len(actuals) {
if !AssertEqual("course count", len(expectCourses), len(actuals)) {
step.AddError(errNotMatchCount)
return
}
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4 changes: 3 additions & 1 deletion webapp/golang/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
const (
SQLDirectory = "../sql/"
AssignmentsDirectory = "../assignments/"
InitDataDirectory = "../data/"
SessionName = "isucholar_go"
mysqlErrNumDuplicateEntry = 1062
)
Expand Down Expand Up @@ -97,6 +98,7 @@ func (h *handlers) Initialize(c echo.Context) error {
files := []string{
"1_schema.sql",
"2_init.sql",
"3_sample.sql",
}
for _, file := range files {
data, err := os.ReadFile(SQLDirectory + file)
Expand All @@ -114,7 +116,7 @@ func (h *handlers) Initialize(c echo.Context) error {
c.Logger().Error(err)
return c.NoContent(http.StatusInternalServerError)
}
if err := exec.Command("mkdir", AssignmentsDirectory).Run(); err != nil {
if err := exec.Command("cp", "-r", InitDataDirectory, AssignmentsDirectory).Run(); err != nil {
c.Logger().Error(err)
return c.NoContent(http.StatusInternalServerError)
}
Expand Down
64 changes: 64 additions & 0 deletions webapp/sql/3_sample.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
INSERT INTO `users` (`id`, `code`, `name`, `hashed_password`, `type`) VALUES
('01FF4RXEKS0DG2EG20CKDWS7CC','T99999','isucon-teacher','$2a$04$DM8mmWZ9vaCRS1ZCBCAMju3Fg2PAv9SvSq4UZss7XYGJQNSESQEZm','teacher'),
('01FF4RXEKS0DG2EG20CN2GJB8K','S99999','isucon1','$2a$04$E6TdLLp72D1l5EJcQ6qDn.AB/bdFh6gtVcgu0SUFS.3j.Vt5X9ch2','student'),
('01FF4RXEKS0DG2EG20CQVX6FV0','S99998','isucon2','$2a$04$abH7BE13odlVdw.rLLDvT.mWcTsvR.FXIm0.Pu0p2iiE4WvV6N51O','student'),
('01FF4RXEKS0DG2EG20CTTAPEVH','S99997','isucon3','$2a$04$6q3Lb.KYJLkkaWx34DMVy.1t2icsMbzW1eQvwFzXesHW3encgz/ru','student');

INSERT INTO `courses` VALUES
('01FF4RXEKS0DG2EG20CWPQ60M3','X00001','major-subjects','ISUCON演習第一','この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。',1,1,'monday','01FF4RXEKS0DG2EG20CKDWS7CC','ISUCON SpeedUP','in-progress'),
('01FF4RXEKS0DG2EG20CYAYCCGM','X00002','major-subjects','ISUCON演習第二','この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。',1,1,'tuesday','01FF4RXEKS0DG2EG20CKDWS7CC','ISUCON SpeedUP','in-progress'),
('01FF4RXEKS0DG2EG20D23EQZRY','X00003','major-subjects','ISUCON演習第三','この科目ではISUCONの過去問を通してサーバのチューニングアップを学びます。\n課題は講義中に出題するクイズへの回答を提出してください。\n\n本講義の成績は課題の提出状況により判断します。',1,1,'wednesday','01FF4RXEKS0DG2EG20CKDWS7CC','ISUCON SpeedUP','registration');

INSERT INTO `registrations` VALUES
('01FF4RXEKS0DG2EG20CWPQ60M3','01FF4RXEKS0DG2EG20CN2GJB8K'),
('01FF4RXEKS0DG2EG20CWPQ60M3','01FF4RXEKS0DG2EG20CQVX6FV0'),
('01FF4RXEKS0DG2EG20CWPQ60M3','01FF4RXEKS0DG2EG20CTTAPEVH'),
('01FF4RXEKS0DG2EG20CYAYCCGM','01FF4RXEKS0DG2EG20CN2GJB8K');

INSERT INTO `classes` VALUES
('01FF4RXEKS0DG2EG20CWPQ60M3','01FF4RXEKS0DG2EG20CWPQ60M3',1,'第1回 ISUCON4 予選','本日はISUCON4 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。',0),
('01FF4RXEKS0DG2EG20CYAYCCGM','01FF4RXEKS0DG2EG20CWPQ60M3',2,'第2回 ISUCON4 本選','本日はISUCON4 本選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。',0),
('01FF4RXEKS0DG2EG20D23EQZRY','01FF4RXEKS0DG2EG20CWPQ60M3',3,'第3回 ISUCON5 予選','本日はISUCON5 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。',0),
('01FF4RXEKS0DG2EG20D4APKY18','01FF4RXEKS0DG2EG20CWPQ60M3',4,'第4回 ISUCON6 予選','本日はISUCON6 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。',0),
('01FF4RXEKS0DG2EG20D61YCEM1','01FF4RXEKS0DG2EG20CWPQ60M3',5,'第5回 ISUCON7 予選','本日はISUCON7 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。',0);

INSERT INTO `announcements` VALUES
('01FF4RXEKS0DG2EG20D6N5CNRQ','01FF4RXEKS0DG2EG20CWPQ60M3','クラス追加: ISUCON4 予選','クラスが新しく追加されました: ISUCON4 予選\n本日はISUCON4 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。'),
('01FF4RXEKS0DG2EG20DA1W34X3','01FF4RXEKS0DG2EG20CWPQ60M3','クラス追加: ISUCON4 本選','クラスが新しく追加されました: ISUCON4 本選\n本日はISUCON4 本選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。'),
('01FF4RXEKS0DG2EG20DAGTWP61','01FF4RXEKS0DG2EG20CWPQ60M3','クラス追加: ISUCON5 予選','クラスが新しく追加されました: ISUCON5 予選\n本日はISUCON5 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。'),
('01FF4RXEKS0DG2EG20DBT4PFHF','01FF4RXEKS0DG2EG20CWPQ60M3','クラス追加: ISUCON6 予選','クラスが新しく追加されました: ISUCON6 予選\n本日はISUCON6 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。'),
('01FF4RXEKS0DG2EG20DDPCS14P','01FF4RXEKS0DG2EG20CWPQ60M3','クラス追加: ISUCON7 予選','クラスが新しく追加されました: ISUCON7 予選\n本日はISUCON7 予選の過去問を実施します。課題は講義中に出題するクイズへの回答を提出してください。');

INSERT INTO `unread_announcements` VALUES
('01FF4RXEKS0DG2EG20D6N5CNRQ','01FF4RXEKS0DG2EG20CN2GJB8K',true),
('01FF4RXEKS0DG2EG20DA1W34X3','01FF4RXEKS0DG2EG20CN2GJB8K',true),
('01FF4RXEKS0DG2EG20DAGTWP61','01FF4RXEKS0DG2EG20CN2GJB8K',true),
('01FF4RXEKS0DG2EG20DBT4PFHF','01FF4RXEKS0DG2EG20CN2GJB8K',true),
('01FF4RXEKS0DG2EG20DDPCS14P','01FF4RXEKS0DG2EG20CN2GJB8K',true),
('01FF4RXEKS0DG2EG20D6N5CNRQ','01FF4RXEKS0DG2EG20CQVX6FV0',true),
('01FF4RXEKS0DG2EG20DA1W34X3','01FF4RXEKS0DG2EG20CQVX6FV0',true),
('01FF4RXEKS0DG2EG20DAGTWP61','01FF4RXEKS0DG2EG20CQVX6FV0',true),
('01FF4RXEKS0DG2EG20DBT4PFHF','01FF4RXEKS0DG2EG20CQVX6FV0',true),
('01FF4RXEKS0DG2EG20DDPCS14P','01FF4RXEKS0DG2EG20CQVX6FV0',true),
('01FF4RXEKS0DG2EG20D6N5CNRQ','01FF4RXEKS0DG2EG20CTTAPEVH',true),
('01FF4RXEKS0DG2EG20DA1W34X3','01FF4RXEKS0DG2EG20CTTAPEVH',true),
('01FF4RXEKS0DG2EG20DAGTWP61','01FF4RXEKS0DG2EG20CTTAPEVH',true),
('01FF4RXEKS0DG2EG20DBT4PFHF','01FF4RXEKS0DG2EG20CTTAPEVH',true),
('01FF4RXEKS0DG2EG20DDPCS14P','01FF4RXEKS0DG2EG20CTTAPEVH',true);

INSERT INTO `submissions` VALUES
('01FF4RXEKS0DG2EG20CN2GJB8K','01FF4RXEKS0DG2EG20CWPQ60M3','S99999_1st.pdf',72),
('01FF4RXEKS0DG2EG20CN2GJB8K','01FF4RXEKS0DG2EG20CYAYCCGM','S99999_2nd.pdf',65),
('01FF4RXEKS0DG2EG20CN2GJB8K','01FF4RXEKS0DG2EG20D23EQZRY','S99999_3rd.pdf',88),
('01FF4RXEKS0DG2EG20CN2GJB8K','01FF4RXEKS0DG2EG20D4APKY18','S99999_4th.pdf',54),
('01FF4RXEKS0DG2EG20CN2GJB8K','01FF4RXEKS0DG2EG20D61YCEM1','S99999_5th.pdf',60),
('01FF4RXEKS0DG2EG20CQVX6FV0','01FF4RXEKS0DG2EG20CWPQ60M3','S99998_1st.pdf',12),
('01FF4RXEKS0DG2EG20CQVX6FV0','01FF4RXEKS0DG2EG20CYAYCCGM','S99998_2nd.pdf',8),
('01FF4RXEKS0DG2EG20CQVX6FV0','01FF4RXEKS0DG2EG20D23EQZRY','S99998_3rd.pdf',26),
('01FF4RXEKS0DG2EG20CQVX6FV0','01FF4RXEKS0DG2EG20D4APKY18','S99998_4th.pdf',33),
('01FF4RXEKS0DG2EG20CQVX6FV0','01FF4RXEKS0DG2EG20D61YCEM1','S99998_5th.pdf',16),
('01FF4RXEKS0DG2EG20CTTAPEVH','01FF4RXEKS0DG2EG20CWPQ60M3','S99997_1st.pdf',90),
('01FF4RXEKS0DG2EG20CTTAPEVH','01FF4RXEKS0DG2EG20CYAYCCGM','S99997_2nd.pdf',82),
('01FF4RXEKS0DG2EG20CTTAPEVH','01FF4RXEKS0DG2EG20D23EQZRY','S99997_3rd.pdf',73),
('01FF4RXEKS0DG2EG20CTTAPEVH','01FF4RXEKS0DG2EG20D4APKY18','S99997_4th.pdf',79),
('01FF4RXEKS0DG2EG20CTTAPEVH','01FF4RXEKS0DG2EG20D61YCEM1','S99997_5th.pdf',100);

0 comments on commit d83dcfe

Please sign in to comment.