mirror of
https://github.com/PeernetOfficial/Peernet-test-framework.git
synced 2026-07-22 22:27:49 +01:00
new changes
This commit is contained in:
167
main.go
Normal file
167
main.go
Normal file
@@ -0,0 +1,167 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/PeernetOfficial/core"
|
||||
"github.com/PeernetOfficial/core/webapi"
|
||||
"github.com/phayes/freeport"
|
||||
"github.com/spf13/viper"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Default variables
|
||||
var (
|
||||
defaultPath string
|
||||
defaults = map[string]interface{}{}
|
||||
configName = "config"
|
||||
configType = "json"
|
||||
configFile = "config.json"
|
||||
configPaths []string
|
||||
defaultEnvName = "Peernet-Test-Framework"
|
||||
)
|
||||
|
||||
// Config TestNetwork config file
|
||||
type Config struct {
|
||||
NumberOfSlaveNode int
|
||||
NumberOfRootNode int
|
||||
}
|
||||
|
||||
// Spawn test Peernet instances for testing
|
||||
func main() {
|
||||
//1. Create Config function to read configurations
|
||||
//2. Spawn root nodes with Custom configs with a folder structure
|
||||
// with UUID
|
||||
// Test Run 1 ( [/Run1/RootNode1/<config file>],[/Run1/SlaveNode1/<binary>|<config file>]
|
||||
// Start add nodes and manage go routine
|
||||
|
||||
// Get Config information
|
||||
config, err := ConfigInit()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
// Create Peernet instances based on the config
|
||||
config.RunManager()
|
||||
}
|
||||
|
||||
// ConfigInit Reads config file for settings
|
||||
// for the test network
|
||||
func ConfigInit() (*Config, error) {
|
||||
//Paths to search for config file
|
||||
configPaths = append(configPaths, ".")
|
||||
|
||||
//Add all possible configurations paths
|
||||
for _, v := range configPaths {
|
||||
viper.AddConfigPath(v)
|
||||
}
|
||||
|
||||
//Read config file
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
// If the error thrown is config file not found
|
||||
//Sets default configuration to viper
|
||||
for k, v := range defaults {
|
||||
viper.SetDefault(k, v)
|
||||
}
|
||||
viper.SetConfigName(configName)
|
||||
viper.SetConfigFile(configFile)
|
||||
viper.SetConfigType(configType)
|
||||
|
||||
if err = viper.WriteConfig(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// Adds configuration to the struct
|
||||
var config Config
|
||||
if err := viper.Unmarshal(&config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &config, nil
|
||||
}
|
||||
|
||||
// Stores all root nodes generated
|
||||
type RootNodes struct {
|
||||
RootNode []RootNode
|
||||
}
|
||||
|
||||
// RootNode Store information regarding root nodes
|
||||
type RootNode struct {
|
||||
PublicKey string
|
||||
UDPAddress string
|
||||
WebAPIAddress string
|
||||
}
|
||||
|
||||
// RunManager Starts Peernet test network for testing
|
||||
func (c *Config) RunManager() {
|
||||
// Create runs folder if it does not exist
|
||||
os.Mkdir("runs", os.ModePerm)
|
||||
|
||||
now := time.Now()
|
||||
folder := "runs/test" + now.Format("20060102150405")
|
||||
|
||||
// Create runs folder if it does not exist
|
||||
if err := os.Mkdir(folder, os.ModePerm); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Create Root Node
|
||||
for i := 0; i < c.NumberOfRootNode; i++ {
|
||||
// Start root node
|
||||
go StartPeernet(true, folder, i)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// StartPeernet Spawn Peernet instance
|
||||
func StartPeernet(rootNode bool, RunPath string, number int) {
|
||||
|
||||
var config core.Config
|
||||
|
||||
_, err := core.LoadConfig(RunPath+"/Config.yaml", &config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// set paths for warehouse
|
||||
config.WarehouseMain = RunPath + "/data"
|
||||
|
||||
UDPport, err := freeport.GetFreePort()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
UDPportAddress := "127.0.0.1:" + strconv.Itoa(UDPport)
|
||||
config.Listen = []string{UDPportAddress}
|
||||
|
||||
// if root node send back public key,udp address,webapi
|
||||
if rootNode {
|
||||
|
||||
} else {
|
||||
config.SeedList = []core.PeerSeed{{
|
||||
PublicKey: "",
|
||||
Address: []string{""},
|
||||
}}
|
||||
}
|
||||
|
||||
// Copy config to the appropriate folder
|
||||
backend, status, err := core.Init("Your application/1.0", RunPath+"/Config.yaml", nil, nil)
|
||||
if status != core.ExitSuccess {
|
||||
fmt.Printf("Error %d initializing backend: %s\n", status, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
backend.Connect()
|
||||
|
||||
APIport, err := freeport.GetFreePort()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
APIportAddress := "127.0.0.1:" + strconv.Itoa(APIport)
|
||||
|
||||
webapi.Start(backend, []string{APIportAddress}, false, "", "", 0, 0, nil)
|
||||
|
||||
// Figure which folder to read config from
|
||||
}
|
||||
Reference in New Issue
Block a user