Edit

kc3-lang/kc3/test/kc3s/facts_secret.kc3

Branch :

  • test/kc3s/facts_secret.kc3
  • require Facts
    require File
    require Socket
    require TLS
    require TLS.Config
    
    (r = fork()) ; void
    if (r < 0) do
      exit(1)
    end
    if r == 0 do
      TLS.init()
      server_config = TLS.Config.new()
      TLS.Config.set_cert_file(server_config, "/etc/ssl/fullchain.pem")
      TLS.Config.set_key_file(server_config, "/etc/ssl/private/privkey.pem")
      server_tls = TLS.server()
      TLS.configure(server_tls, server_config)
      server_facts = Facts.database()
      Facts.set_secret(server_facts, "1234567890")
      puts("server: listening on 15008")
      server = Socket.listen(hostname(), "15008")
      if server.fd < 0 do
        puts("server: listen failed")
        exit_subprocess(1)
      end
      puts("server: starting acceptor loop")
      acceptor = Facts.acceptor_loop(server_facts, server, server_tls)
      if ! acceptor do
        puts("server: acceptor_loop failed")
        exit_subprocess(1)
      end
      puts("server: acceptor loop started, waiting for client")
      sleep(6)
      Facts.with_tags(server_facts, ?, ?, ?, fn (fact) {
        puts("server: received #{inspect(fact)}")
      })
      puts("server: OK")
      sleep(2)
      Facts.acceptor_loop_join(acceptor)
      Facts.close_all(server_facts)
      Facts.delete(server_facts)
      TLS.Config.free(server_config)
      TLS.free(server_tls)
      exit_subprocess(0)
    else
      sleep(2)
      TLS.init()
      client_config = TLS.Config.new()
      TLS.Config.set_ca_file(client_config, TLS.ca_cert_path())
      client_facts = Facts.database()
      Facts.set_priority(client_facts, (U8) 1)
      Facts.set_secret(client_facts, "1234567890")
      puts("client: connecting to 15008")
      if ! Facts.connect(client_facts, hostname(), "15008", client_config) do
        puts("client: connect failed")
        exit(1)
      end
      puts("client: adding fact")
      Facts.add_tags(client_facts, :a, :b, :c)
      sleep(2)
      puts("client: checking for facts")
      Facts.with_tags(client_facts, ?, ?, ?, fn (fact) {
        puts("client: has #{inspect(fact)}")
      })
      Facts.close_all(client_facts)
      Facts.delete(client_facts)
      TLS.Config.free(client_config)
      puts("client: OK")
      wait()
    end
    0