| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | package test
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  | 	"fmt"
 | 
					
						
							|  |  |  | 	"os"
 | 
					
						
							|  |  |  | 	"os/exec"
 | 
					
						
							|  |  |  | 	"strings"
 | 
					
						
							|  |  |  | 	"testing"
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | // Go get external example plugin, compile it into CoreDNS
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | // and check if it is really there, but running coredns -plugins.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | // Dangerous test as it messes with your git tree, maybe use tag?
 | 
					
						
							| 
									
										
										
										
											2017-09-16 14:13:28 +01:00
										 |  |  | func testExternalPluginCompile(t *testing.T) {
 | 
					
						
							|  |  |  | 	if err := addExamplePlugin(); err != nil {
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	defer run(t, gitReset)
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goGet); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goGen); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goBuild); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	out, err := run(t, coredns)
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !strings.Contains(string(out), "dns.example") {
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 		t.Fatal("dns.example plugin should be there")
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 	}
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func run(t *testing.T, c *exec.Cmd) ([]byte, error) {
 | 
					
						
							|  |  |  | 	c.Dir = ".."
 | 
					
						
							|  |  |  | 	out, err := c.Output()
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("run: failed to run %s %s: %q", c.Args[0], c.Args[1], err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	return out, nil
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 14:13:28 +01:00
										 |  |  | func addExamplePlugin() error {
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 	f, err := os.OpenFile("../plugin.cfg", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		return err
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	defer f.Close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_, err = f.WriteString(example)
 | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	return err
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var (
 | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	goBuild  = exec.Command("go", "build")
 | 
					
						
							|  |  |  | 	goGen    = exec.Command("go", "generate")
 | 
					
						
							|  |  |  | 	goGet    = exec.Command("go", "get", "github.com/coredns/example")
 | 
					
						
							|  |  |  | 	gitReset = exec.Command("git", "checkout", "core/*")
 | 
					
						
							|  |  |  | 	coredns  = exec.Command("./coredns", "-plugins")
 | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const example = "1001:example:github.com/coredns/example"
 |