Documentation ¶
Index ¶
- Constants
- Variables
- func AddPlayistAction(ctx context.Context, name string, ag *agent.Agent) (*http.Response, error)
- func AdminBanAction(ctx context.Context, user *User, isBan bool, ag *agent.Agent) (*http.Response, error)
- func DeletePlaylistAction(ctx context.Context, p *Playlist, ag *agent.Agent) (*http.Response, error)
- func DisplayName() string
- func FavoritePlaylistAction(ctx context.Context, p *Playlist, ag *agent.Agent) (*http.Response, error)
- func GenerateUserAccount() string
- func GetInitializeAction(ctx context.Context, ag *agent.Agent) (*http.Response, error)
- func GetPlaylistAction(ctx context.Context, id string, ag *agent.Agent) (*http.Response, error)
- func GetPlaylistsAction(ctx context.Context, ag *agent.Agent) (*http.Response, error)
- func GetPopularPlaylistsAction(ctx context.Context, ag *agent.Agent) (*http.Response, error)
- func GetRecentPlaylistsAction(ctx context.Context, ag *agent.Agent) (*http.Response, error)
- func GetRootAction(ctx context.Context, ag *agent.Agent) (*http.Response, error)
- func LoadFromJSONFile[T Model](jsonFile string) ([]*T, error)
- func LoginAction(ctx context.Context, user *User, ag *agent.Agent) (*http.Response, error)
- func LogoutAction(ctx context.Context, user *User, ag *agent.Agent) (*http.Response, error)
- func RandomString(n int) string
- func UpdatePlayistAction(ctx context.Context, p *Playlist, ag *agent.Agent) (*http.Response, error)
- type Model
- type Option
- type Playlist
- type ResponseAPI
- type ResponseAPIAddPlaylist
- type ResponseAPIBase
- type ResponseAPIGetPlaylist
- type ResponseAPIGetPlaylists
- type ResponseAPIGetPopularPlaylists
- type ResponseAPIGetRecentPlaylists
- type ResponseAdminBan
- type ResponseValidator
- type ResposeUpdatePlaylist
- type Scenario
- func (s *Scenario) AdminScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) AdminWorker(step *isucandar.BenchmarkStep, _ int32) (*worker.Worker, error)
- func (s *Scenario) AnonScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) AnonWorker(step *isucandar.BenchmarkStep, p int32) (*worker.Worker, error)
- func (s *Scenario) BannedScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) BannedWorker(step *isucandar.BenchmarkStep, p int32) (*worker.Worker, error)
- func (s *Scenario) ChoiceUser(ctx context.Context, pool mapset.Set) (*User, func())
- func (s *Scenario) FavoriteScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) FavoriteWorker(step *isucandar.BenchmarkStep, p int32) (*worker.Worker, error)
- func (s *Scenario) LastPublicPlaylistCreatedAt() time.Time
- func (s *Scenario) Load(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) NormalScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) NormalWorker(step *isucandar.BenchmarkStep, p int32) (*worker.Worker, error)
- func (s *Scenario) Prepare(ctx context.Context, step *isucandar.BenchmarkStep) error
- func (s *Scenario) RateGetPopularPlaylists() int32
- func (s *Scenario) SetLastPublicPlaylistCreatedAt(t time.Time)
- func (s *Scenario) SetRateGetPopularPlaylists(rate int32)
- func (s *Scenario) ValidationScenario(ctx context.Context, step *isucandar.BenchmarkStep) error
- type Song
- type Songs
- type User
- type Users
- type ValidationError
Constants ¶
View Source
const ( ErrFailedLoadJSON failure.StringCode = "load-json" ErrCannotNewAgent failure.StringCode = "agent" ErrInvalidRequest failure.StringCode = "request" )
View Source
const ( ScoreGETRoot score.ScoreTag = "GET /" ScoreSignup score.ScoreTag = "POST /api/signup" ScoreLogin score.ScoreTag = "POST /api/login" ScoreLogout score.ScoreTag = "POST /api/logout" ScoreGetPlaylist score.ScoreTag = "GET /api/playlist/{}" ScoreGetPlaylists score.ScoreTag = "GET /api/playlists" ScoreGetRecentPlaylists score.ScoreTag = "GET /api/recent_playlists" ScoreGetPopularPlaylists score.ScoreTag = "GET /api/popular_playlists" ScoreAddPlaylist score.ScoreTag = "POST /api/playlist/{}/add" ScoreUpdatePlaylist score.ScoreTag = "POST /api/playlist/{}/update" ScoreFavoritePlaylist score.ScoreTag = "POST /api/playlist/favorite" ScoreAdminBan score.ScoreTag = "POST /api/admin/user/ban" ScoreGetRecentPlaylistsLogin score.ScoreTag = "GET /api/recent_playlists (login)" ScoreGetPopularPlaylistsLogin score.ScoreTag = "GET /api/popular_playlists (login)" )
シナリオで発生するスコアのタグ
View Source
const ( ErrInvalidStatusCode failure.StringCode = "status-code" ErrInvalidCacheControl failure.StringCode = "cache-control" ErrInvalidJSON failure.StringCode = "broken-json" ErrInvalidPath failure.StringCode = "path" ErrFailed failure.StringCode = "failed" ErrValidation failure.StringCode = "validation" )
failure.NewError で用いるエラーコード定義
Variables ¶
View Source
var ( // 選手向け情報を出力するロガー ContestantLogger = log.New(os.Stdout, "", log.Ltime|log.Lmicroseconds) // 大会運営向け情報を出力するロガー AdminLogger = log.New(os.Stderr, "[ADMIN] ", log.Ltime|log.Lmicroseconds) )
View Source
var ( Debug = false MaxErrors = 30 )
Functions ¶
func AddPlayistAction ¶
func AdminBanAction ¶
func DeletePlaylistAction ¶
func DisplayName ¶
func DisplayName() string
func FavoritePlaylistAction ¶
func GenerateUserAccount ¶
func GenerateUserAccount() string
func GetInitializeAction ¶
func GetPlaylistAction ¶
func GetPlaylistsAction ¶
func GetRootAction ¶
func LoadFromJSONFile ¶
func LoginAction ¶
func LogoutAction ¶
func RandomString ¶
Types ¶
type Option ¶
type Playlist ¶
type Playlist struct { ULID string `json:"ulid"` Name string `json:"name"` UserDisplayName string `json:"user_display_name"` UserAccount string `json:"user_account"` SongCount int `json:"song_count"` Songs Songs `json:"-"` FavoriteCount int `json:"favorite_count"` IsFavorited bool `json:"is_favorited"` IsPublic bool `json:"is_public"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` }
type ResponseAPI ¶
type ResponseAPI interface { ResponseAPIBase | ResponseAPIGetPlaylists | ResponseAPIAddPlaylist | ResponseAPIGetPlaylist | ResposeUpdatePlaylist | ResponseAPIGetRecentPlaylists | ResponseAPIGetPopularPlaylists | ResponseAdminBan IsSuccess() bool ErrorMessage() string }
type ResponseAPIAddPlaylist ¶
type ResponseAPIAddPlaylist struct { ResponseAPIBase PlaylistULID string `json:"playlist_ulid"` }
type ResponseAPIBase ¶
type ResponseAPIBase struct { Result bool `json:"result"` Status int `json:"status"` Error string `json:"error"` }
func (ResponseAPIBase) ErrorMessage ¶
func (r ResponseAPIBase) ErrorMessage() string
func (ResponseAPIBase) IsSuccess ¶
func (r ResponseAPIBase) IsSuccess() bool
type ResponseAPIGetPlaylist ¶
type ResponseAPIGetPlaylist struct { ResponseAPIBase Playlist Playlist `json:"playlist"` }
type ResponseAPIGetPlaylists ¶
type ResponseAPIGetPlaylists struct { ResponseAPIBase CreatedPlaylists []Playlist `json:"created_playlists"` FavoritedPlaylists []Playlist `json:"favorited_playlists"` }
type ResponseAPIGetPopularPlaylists ¶
type ResponseAPIGetPopularPlaylists struct { ResponseAPIBase Playlists []Playlist `json:"playlists"` }
type ResponseAPIGetRecentPlaylists ¶
type ResponseAPIGetRecentPlaylists struct { ResponseAPIBase Playlists []Playlist `json:"playlists"` }
type ResponseAdminBan ¶
type ResponseAdminBan struct { ResponseAPIBase UserAccount string `json:"user_account"` DisplayName string `json:"display_name"` IsBan bool `json:"is_ban"` }
type ResponseValidator ¶
レスポンスを検証するバリデータ関数の型
func WithCacheControlPrivate ¶
func WithCacheControlPrivate() ResponseValidator
func WithErrorResponse ¶
func WithErrorResponse[T ResponseAPI]() ResponseValidator
func WithStatusCode ¶
func WithStatusCode(statusCodes ...int) ResponseValidator
ステータスコードコードを検証するバリデータ関数を返す高階関数 例: ValidateResponse(res, WithStatusCode(200, 304))
func WithSuccessResponse ¶
func WithSuccessResponse[T ResponseAPI](validates ...func(res T) error) ResponseValidator
type ResposeUpdatePlaylist ¶
type ResposeUpdatePlaylist struct { ResponseAPIBase Name string `json:"name"` IsPublic bool `json:"is_public"` SongUILDs []string `json:"song_ulids"` }
type Scenario ¶
type Scenario struct { Option Option NormalUsers mapset.Set HeavyUsers mapset.Set BannedUsers mapset.Set Songs Songs AdminUser *User Errors failure.Errors // contains filtered or unexported fields }
オプションと全データを持つシナリオ構造体
func (*Scenario) AdminScenario ¶
AdminUserのシナリオ
func (*Scenario) AdminWorker ¶
func (*Scenario) AnonScenario ¶
匿名User
func (*Scenario) AnonWorker ¶
ログインしないユーザーのシナリオ
func (*Scenario) BannedScenario ¶
Ban済みUserのシナリオ
func (*Scenario) BannedWorker ¶
func (*Scenario) ChoiceUser ¶
func (*Scenario) FavoriteScenario ¶
新着Playlistにfav/add爆撃をするシナリオ
func (*Scenario) FavoriteWorker ¶
func (*Scenario) LastPublicPlaylistCreatedAt ¶
func (*Scenario) NormalScenario ¶
普通のUser
func (*Scenario) NormalWorker ¶
func (*Scenario) Prepare ¶
isucandar.PrepeareScenario を満たすメソッド isucandar.Benchmark の Prepare ステップで実行される
func (*Scenario) RateGetPopularPlaylists ¶
func (*Scenario) SetLastPublicPlaylistCreatedAt ¶
func (*Scenario) SetRateGetPopularPlaylists ¶
func (*Scenario) ValidationScenario ¶
整合性検証シナリオ 自分で作ったplaylistを直後に削除したりするので、並列で実行するとfavした他人のplaylistが削除されて壊れる可能性がある 負荷テスト中には実行してはいけない
type User ¶
type User struct { Account string `json:"account"` Password string `json:"password"` DisplayName string `json:"display_name"` IsBan bool `json:"is_ban"` IsHeavy bool `json:"is_heavy"` Agent *agent.Agent // contains filtered or unexported fields }
func SignupAction ¶
type ValidationError ¶
func ValidateResponse ¶
func ValidateResponse(title string, step *isucandar.BenchmarkStep, res *http.Response, err error, validators ...ResponseValidator) ValidationError
レスポンスを検証する関数 複数のバリデータ関数を受け取ってすべてでレスポンスを検証し、 ValidationError を返す
func (ValidationError) Add ¶
func (v ValidationError) Add(step *isucandar.BenchmarkStep)
func (ValidationError) Error ¶
func (v ValidationError) Error() string
error インターフェースを満たす Error メソッド
Source Files ¶
Click to show internal directories.
Click to hide internal directories.