Skip to content
Snippets Groups Projects
main_test.go 2.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • // go generate protoc --proto_path=kmsintercomproto --go_out=kmsintercomproto --go_opt=paths=source_relative --go-grpc_out=kmsintercomproto --go-grpc_opt=paths=source_relative  kmsintercom.proto
    
    // go generate protoc --proto_path=kmsetsiproto  --go_out=kmsetsiproto --go_opt=paths=source_relative --go-grpc_out=kmsetsiproto --go-grpc_opt=paths=source_relative  kmsetsiproto.proto
    
    	"flag"
    
    	"code.fbi.h-da.de/danet/proto-kms/kms"
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	"github.com/google/uuid"
    
    //func main() {
    
    func TestMain(m *testing.M) {
    
    	// run a self-test if set to yes
    	var selfTesting bool
    
    	// my own Name
    	var udpQL1AddrString string
    	var ql1Name string
    
    	// a name for potential self-testing
    
    	var udpQL2AddrString string
    	var ql2Name string
    
    	// Setup flags that allows to initially provide a address to a second
    	// quantumlayer so generated keys can be fetched. This is mainly to simplify
    	// the initial setup process.
    
    	flag.BoolVar(&selfTesting, "selftesting", true,
    
    		"Will perform self-testing with second quantum link if set to true")
    
    
    	flag.StringVar(&udpQL1AddrString, "my-address", "[::1]:50900",
    
    		"The UDP address for my quantumlayer so keys can be fetched")
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    
    
    	flag.StringVar(&ql1Name, "my-name", "ekms-ql1",
    
    		"The name of the quantumlayer")
    
    	flag.StringVar(&udpQL2AddrString, "remote-address", "[::1]:50901",
    
    		"The UDP address to a second quantumlayer so keys can be fetched")
    
    
    	flag.StringVar(&ql2Name, "remote-name", "ekms-ql2",
    
    		"The name of the quantumlayer")
    
    	// Parse the provided flags
    	flag.Parse()
    
    
    	log.Println("Welcome to the proto-kms called: ", ql1Name)
    
    	if selfTesting == true {
    
    		log.Infof("%s in self-testing mode", ql1Name)
    
    		go emulatedKMS(ql2Name, udpQL2AddrString, udpQL1AddrString)
    		emulatedKMS(ql1Name, udpQL1AddrString, udpQL2AddrString)
    	} else {
    
    		log.Infof("%s in regular operations mode", ql1Name)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    		emulatedKMS(ql1Name, udpQL1AddrString, udpQL2AddrString)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	return
    }
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    func emulatedKMS(myName string, myUDPAddr string, peerUDPAddr string) {
    	// Attach to eKMS
    
    	emuKMS := kms.NewEKMS(myName, uuid.New(), os.Stdout, log.DebugLevel, false)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    	// Fire up Quantum LinK
    
    	myQL := emuKMS.AddQuantumElement(myUDPAddr, os.Stdout, log.ErrorLevel, false)
    
    Martin Stiemerling's avatar
    Martin Stiemerling committed
    
    	udpQL2Addr, err := net.ResolveUDPAddr("udp", peerUDPAddr)
    
    		log.Fatalf("%s: QuantumlayerEmuPRNG UDP failure: %s", myName, err)
    
    	myQL.QuantumElementLink.AddPeer(udpQL2Addr)
    
    	// Start the SDN/management and key retrieval interface
    
    	go kms.StartETSI(peerUDPAddr, emuKMS)
    
    	// TODO/XXX catch errors!
    
    	emuKMS.GlobalKeyHandler(7 * time.Second)