summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
Diffstat (limited to 'methods')
-rw-r--r--methods/test_methods.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/methods/test_methods.go b/methods/test_methods.go
new file mode 100644
index 0000000..9499590
--- /dev/null
+++ b/methods/test_methods.go
@@ -0,0 +1,96 @@
+package methods
+
+import (
+ "errors"
+ "fmt"
+ "fpdns_client/utils"
+ "strconv"
+ "time"
+
+ "github.com/miekg/dns"
+)
+
+func ProbeStart(addr string, sld string) (int, error) {
+ time_now := strconv.FormatInt(time.Now().Unix(), 10)
+ domain := dns.Fqdn("start-" + time_now + "." + sld)
+ res, err := utils.DNSQuery(addr, domain, false, 1, 1, false)
+ if err == nil {
+ if len(res.Answer) == 1 {
+ if a, ok := res.Answer[0].(*dns.A); ok {
+ ip_str := a.A.String()
+ ip_val, _ := utils.IPv4ToInt(ip_str)
+ return int(ip_val), nil
+ }
+ }
+ } else {
+ return 0, err
+ }
+ return 0, errors.New("wrong token response")
+}
+
+func InitProbe(addr string, token int, sld string) error {
+ time_now := strconv.FormatInt(time.Now().Unix(), 10)
+ domain := dns.Fqdn("init-" + time_now + "-" + strconv.Itoa(token) + "." + sld)
+ res, err := utils.DNSQuery(addr, domain, true, 1, 1, false)
+ if err != nil {
+ return err
+ } else {
+ if len(res.Answer) == 1 {
+ if a, ok := res.Answer[0].(*dns.A); ok {
+ ip_str := a.A.String()
+ if ip_str == "200.200.200.200" {
+ return nil
+ }
+ } else {
+ return errors.New("invalid Reply Code")
+ }
+ }
+ }
+ return errors.New("init query failure")
+}
+
+func ProbeTerminate(addr string, token int, sld string) error {
+ time_now := strconv.FormatInt(time.Now().Unix(), 10)
+ domain := dns.Fqdn("end-" + time_now + "-" + strconv.Itoa(token) + "." + sld)
+ res, err := utils.DNSQuery(addr, domain, false, 1, 1, false)
+ if err != nil {
+ return err
+ } else {
+ if len(res.Answer) == 1 {
+ if a, ok := res.Answer[0].(*dns.A); ok {
+ ip_str := a.A.String()
+ if ip_str == "200.200.200.200" {
+ return nil
+ }
+ } else {
+ return errors.New("invalid Reply Code")
+ }
+ }
+ }
+ return errors.New("terminate query failure")
+}
+
+func BehaviorTest(target string, server string, api_port string, sld string) (string, error) {
+ target_addr := target + ":53"
+ server_addr := server + ":53"
+ result_addr := server + ":" + api_port
+ token, err := ProbeStart(server_addr, sld)
+ if err != nil {
+ return "", err
+ }
+ err = InitProbe(target_addr, token, sld)
+ if err != nil {
+ return "", err
+ }
+ err = ProbeTerminate(server_addr, token, sld)
+ if err != nil {
+ return "", err
+ }
+ data, err := utils.GetResult(result_addr, token)
+ if err != nil {
+ return "", err
+ }
+ json_str, _ := utils.OutputJson(data)
+ fmt.Println(json_str)
+ return "", nil
+}