name = "pubsub" [defaults] builder = "exec:go" runner = "local:exec" [builders."docker:go"] enabled = true go_version = "1.14" module_path = "github.com/libp2p/test-plans/pubsub/test" exec_pkg = "." go_ipfs_version = "0.4.22" [builders."exec:go"] enabled = true module_path = "github.com/libp2p/test-plans/pubsub/test" exec_pkg = "." [runners."local:docker"] enabled = true [runners."local:exec"] enabled = true [runners."cluster:k8s"] enabled = true [[testcases]] name = "evaluate" instances = { min = 1, max = 2000, default = 10 } [testcases.params] # params with type "duration" must be parseable by time.ParseDuration, e.g. 2m or 30s # params with type "size" must be parseable by https://godoc.org/github.com/dustin/go-humanize#ParseBytes, e.g. "1kb" ## global params t_heartbeat = { type = "duration", desc = "Interval between emiting maintenance messages", default="1s" } t_heartbeat_initial_delay = { type = "duration", desc = "Delay before starting hearbeat", default="100ms" } t_setup = { type = "duration", desc = "Upper bound on expected time period for waiting for all peers to register etc", default="1m" } t_run = { type = "duration", desc = "Time to run the simulation", default="2m" } t_warm = { type = "duration", desc = "Time to wait for nodes to establish connections before beginning publishing", default="5s" } t_cool = { type = "duration", desc = "Time to wait after test execution for straggling publishers, etc.", default="10s" } topics = { type = "json", desc = "json array of TopicConfig objects." } score_params = { type = "json", desc = "a json ScoreParams object (see params.go). ignored unless hardened_api build flag is set."} full_traces = { type = "bool", desc = "if true, collect full pubsub protobuf trace events, in addition to aggregate metrics", default="false" } validate_queue_size = { type = "int", desc = "Size of pubsub validation queue", default=0 } outbound_queue_size = { type = "int", desc = "Size of pubsub outbound queue", default=0 } t_latency = { type = "duration", desc = "Network latency between nodes", default="5ms" } t_latency_max = { type = "duration", desc = "If supplied, latency is between t_latency and t_latency_max", default="50ms" } jitter_pct = { type = "int", desc = "Jitter in latency", default=10 } bandwidth_mb = { type = "int", desc = "Bandwidth in MiB", default=10240 } topology = { type = "string", desc = "topology in json format" } degree = { type = "int", desc = "the number of nodes to connect to", default=20 } n_container_nodes_total = { type = "int", desc = "the number of total nodes including multiple nodes per container", default=1 } n_nodes_per_container = { type = "int", desc = "the number of nodes to start up in each container", default=1 } ## pubsub node config publisher = { type = "bool", desc = "if true, this instance should publish to subscribed topics instead of lurking", default=false } flood_publishing = { type = "bool", desc = "if true, nodes will flood when publishing their own messages. only applies to hardening branch", default=false } t_score_inspect_period = { type = "duration", desc = "Interval between printing peer scores", default="0" } overlay_d = { type = "int", desc = "the number of nodes gossipsub tries to stay connected to", default=-1 } overlay_dlo = { type = "int", desc = "the low watermark of overlay_d", default=-1 } overlay_dhi = { type = "int", desc = "the high watermark of overlay_d", default=-1 } overlay_dscore = { type = "int", desc = "the number of peers to keep by score", default=-1 } overlay_dlazy = { type = "int", desc = "degree for gossip nodes", default=-1 } gossip_factor = { type = "float", desc = "gossip factor", default=0.25 } opportunistic_graft_ticks = { type = "int", desc = "Number of heartbeat ticks for attempting opportunistic grafting", default=60 }