github.com/symfony-cli/symfony-cli@v0.0.0-20240514161054-ece2df437dfa/git/exec_test.go (about)

     1  /*
     2   * Copyright (c) 2021-present Fabien Potencier <fabien@symfony.com>
     3   *
     4   * This file is part of Symfony CLI project
     5   *
     6   * This program is free software: you can redistribute it and/or modify
     7   * it under the terms of the GNU Affero General Public License as
     8   * published by the Free Software Foundation, either version 3 of the
     9   * License, or (at your option) any later version.
    10   *
    11   * This program is distributed in the hope that it will be useful,
    12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    14   * GNU Affero General Public License for more details.
    15   *
    16   * You should have received a copy of the GNU Affero General Public License
    17   * along with this program. If not, see <http://www.gnu.org/licenses/>.
    18   */
    19  
    20  package git
    21  
    22  import (
    23  	"bytes"
    24  	"testing"
    25  
    26  	. "gopkg.in/check.v1"
    27  )
    28  
    29  type GitSuite struct{}
    30  
    31  var _ = Suite(&GitSuite{})
    32  
    33  func TestGit(t *testing.T) { TestingT(t) }
    34  
    35  var expectedOutput = `
    36    Enumerating objects: 7, done.
    37    Counting objects: 0% (0/7), done.` + "\r" + `  Counting objects: 57% (4/7), done.` + "\r" + `  Counting objects: 100% (7/7), done.
    38    Delta compression using up to 4 threads
    39    Compressing objects: 100% (4/4), done.
    40    Writing objects: 100% (4/4), 1.05 KiB | 1.05 MiB/s, done.
    41    Total 4 (delta 2), reused 1 (delta 0)
    42  
    43    Validating submodules
    44  
    45    Validating configuration files
    46  
    47    Processing activity: Tugdual Saunier pushed to test-deployment-failing
    48        Found 1 new commit
    49  
    50        Building application 'app' (runtime type: golang:1.11, tree: 5e8278e)
    51          Generating runtime configuration.
    52  
    53          Executing build hook...
    54            W: + curl -s https://get.symfony.com/cloud/configurator
    55            W: + bash
    56            W: + mkdir -p /app/.global/bin/
    57            W: + tar -C /app/.global/bin/ -jxpf -
    58            W: + curl -s https://get.symfony.com/cloud/tools.tar.bz2
    59            W: + echo -e ''
    60            W: + echo 'export PATH=/app/bin:/app/vendor/bin:$PATH $(scenv)'
    61            W: + echo eyJzaXplIjogIkFVVE8iLCAiZGlzayI6IDEwMjQsICJhY2Nlc3MiOiB7InNzaCI6ICJjb250cmlidXRvciJ9LCAicmVsYXRpb25zaGlwcyI6IHt9LCAibW91bnRzIjogeyIvdmFyIjogeyJzb3VyY2UiOiAibG9jYWwiLCAic291cmNlX3BhdGgiOiAidmFyIn19LCAidGltZXpvbmUiOiBudWxsLCAidmFyaWFibGVzIjoge30sICJuYW1lIjogImFwcCIsICJ0eXBlIjogImdvbGFuZzoxLjExIiwgInJ1bnRpbWUiOiB7fSwgInByZWZsaWdodCI6IHsiZW5hYmxlZCI6IHRydWUsICJpZ25vcmVkX3J1bGVzIjogW119LCAiZGVwZW5kZW5jaWVzIjoge30sICJidWlsZCI6IHsiZmxhdm9yIjogIm5vbmUifSwgIndlYiI6IHsibG9jYXRpb25zIjogeyIvIjogeyJyb290IjogbnVsbCwgImV4cGlyZXMiOiAiLTFzIiwgInBhc3N0aHJ1IjogdHJ1ZSwgInNjcmlwdHMiOiB0cnVlLCAiYWxsb3ciOiBmYWxzZSwgImhlYWRlcnMiOiB7fSwgInJ1bGVzIjoge319fSwgImNvbW1hbmRzIjogeyJzdGFydCI6ICJzY2VudiAvYXBwL3N0cmlwZS1ub3RpZmljYXRpb25zIiwgInN0b3AiOiBudWxsfSwgInVwc3RyZWFtIjogeyJzb2NrZXRfZmFtaWx5IjogInRjcCIsICJwcm90b2NvbCI6ICJodHRwIn0sICJtb3ZlX3RvX3Jvb3QiOiBmYWxzZX0sICJob29rcyI6IHsiYnVpbGQiOiAic2V0IC1lIC14XG5cblxuXG5cblxuXG5cblxuXG5jdXJsIC1zIGh0dHBzOi8vZ2V0LnN5bWZvbnkuY29tL2Nsb3VkL2NvbmZpZ3VyYXRvciB8ICg+JjIgYmFzaClcbmdvIGJ1aWxkXG4iLCAiZGVwbG95IjogbnVsbCwgInBvc3RfZGVwbG95IjogbnVsbH0sICJjcm9ucyI6IHt9LCAid29ya2VycyI6IHt9fQ==
    62            W: + base64 --decode
    63            W: + json_pp
    64            W: + grep '"type" : "php'
    65            W: + base64 --decode
    66            W: + exit 0
    67            W: + go build
    68            W: go: finding github.com/nlopes/slack v0.4.0
    69            W: [...]
    70            W: go: downloading github.com/gorilla/websocket v1.4.0
    71            W: go: downloading github.com/pkg/errors v0.8.0
    72  
    73          Executing pre-flight checks...
    74  
    75          Compressing application.
    76          Beaming package to its final destination.
    77  
    78        Provisioning certificates
    79          Environment certificates
    80          - certificate d22187d: expiring on 2019-01-28 07:13:00+00:00, covering test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io
    81  
    82  
    83        Re-deploying environment 4xfrp6lcgobc4-test-deployment-failing-gbppxsi
    84          Environment configuration
    85            app (type: golang:1.11, size: S, disk: 1024)
    86  
    87          Environment routes
    88            http://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/ redirects to https://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/
    89            https://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/ is served by application 'app'
    90  
    91  
    92    To git.eu.s5y.io:4xfrp6lcgobc4.git
    93       72daff6..2c02b16  HEAD -> test-deployment-failing
    94  `
    95  
    96  func (ts *GitSuite) TestGitOutputWriter(t *C) {
    97  	var buf bytes.Buffer
    98  	writer := gitOutputWriter{output: &buf}
    99  
   100  	if _, err := writer.Write([]byte("\n")); err != nil {
   101  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   102  	}
   103  
   104  	if _, err := writer.Write([]byte("Enumerating objects: 7, done.\n")); err != nil {
   105  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   106  	}
   107  
   108  	if _, err := writer.Write([]byte("Counting objects: 0% (0/7), done.\r")); err != nil {
   109  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   110  	}
   111  
   112  	if _, err := writer.Write([]byte("Counting objects: 57% (4/7), done.\r")); err != nil {
   113  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   114  	}
   115  
   116  	if _, err := writer.Write([]byte("Counting objects: 100% (7/7), done.\nDelta compression using up to 4 threads\n")); err != nil {
   117  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   118  	}
   119  
   120  	if _, err := writer.Write([]byte("Compressing objects: 100% (4/4), done.\n")); err != nil {
   121  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   122  	}
   123  
   124  	if _, err := writer.Write([]byte("Writing objects: 100% (4/4), 1.05 KiB | 1.05 MiB/s, done.\nTotal 4 (delta 2), reused 1 (delta 0)\n")); err != nil {
   125  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   126  	}
   127  
   128  	if _, err := writer.Write([]byte("\n")); err != nil {
   129  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   130  	}
   131  
   132  	if _, err := writer.Write([]byte("Validating sub")); err != nil {
   133  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   134  	}
   135  
   136  	if _, err := writer.Write([]byte("modules\n")); err != nil {
   137  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   138  	}
   139  
   140  	if _, err := writer.Write([]byte("\n")); err != nil {
   141  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   142  	}
   143  
   144  	if _, err := writer.Write([]byte("Validating configuration files\n")); err != nil {
   145  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   146  	}
   147  
   148  	if _, err := writer.Write([]byte("\n")); err != nil {
   149  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   150  	}
   151  
   152  	if _, err := writer.Write([]byte("Processing activity: Tugdual Saunier pushed to test-deployment-failing\n")); err != nil {
   153  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   154  	}
   155  
   156  	if _, err := writer.Write([]byte("    Found 1 new commit\n")); err != nil {
   157  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   158  	}
   159  
   160  	if _, err := writer.Write([]byte("\n")); err != nil {
   161  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   162  	}
   163  
   164  	if _, err := writer.Write([]byte("    Building application 'app' (runtime type: golang:1.11, tree: 5e8278e)\n")); err != nil {
   165  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   166  	}
   167  
   168  	if _, err := writer.Write([]byte("      Generating runtime configuration.\n")); err != nil {
   169  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   170  	}
   171  
   172  	if _, err := writer.Write([]byte("\n")); err != nil {
   173  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   174  	}
   175  
   176  	if _, err := writer.Write([]byte("      Executing build hook...\n")); err != nil {
   177  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   178  	}
   179  
   180  	if _, err := writer.Write([]byte("        W: + curl -s https://get.symfony.com/cloud/configurator\n        W: + bash\n")); err != nil {
   181  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   182  	}
   183  
   184  	if _, err := writer.Write([]byte("        W: + mkdir -p /app/.global/bin/\n")); err != nil {
   185  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   186  	}
   187  
   188  	if _, err := writer.Write([]byte("        W: + tar -C /app/.global/bin/ -jxpf -\n")); err != nil {
   189  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   190  	}
   191  
   192  	if _, err := writer.Write([]byte("        W: + curl -s https://get.symfony.com/cloud/tools.tar.bz2\n")); err != nil {
   193  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   194  	}
   195  
   196  	if _, err := writer.Write([]byte("        W: + echo -e ''\n")); err != nil {
   197  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   198  	}
   199  
   200  	if _, err := writer.Write([]byte("        W: + echo 'export PATH=/app/bin:/app/vendor/bin:$PATH $(scenv)'\n")); err != nil {
   201  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   202  	}
   203  
   204  	if n, err := writer.Write([]byte("        W: + echo eyJzaXplIjogIkFVVE8iLCAiZGlzayI6IDEwMjQsICJhY2Nlc3MiOiB7InNzaCI6ICJjb250cmlidXRvciJ9LCAicmVsYXRpb25zaGlwcyI6IHt9LCAibW91bnRzIjogeyIvdmFyIjogeyJzb3VyY2UiOiAibG9jYWwiLCAic291cmNlX3BhdGgiOiAidmFyIn19LCAidGltZXpvbmUiOiBudWxsLCAidmFyaWFibGVzIjoge30sICJuYW1lIjogImFwcCIsICJ0eXBlIjogImdvbGFuZzoxLjExIiwgInJ1bnRpbWUiOiB7fSwgInByZWZsaWdodCI6IHsiZW5hYmxlZCI6IHRydWUsICJpZ25vcmVkX3J1bGVzIjogW119LCAiZGVwZW5kZW5jaWVzIjoge30sICJidWlsZC")); err != nil {
   205  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   206  	} else if n != 440 {
   207  		t.Fatalf("wrong char count returned by gitOutputWriter.Write: got %v, 440 expected", n)
   208  	}
   209  
   210  	if n, err := writer.Write([]byte("I6IHsiZmxhdm9yIjogIm5vbmUifSwgIndlYiI6IHsibG9jYXRpb25zIjogeyIvIjogeyJyb290IjogbnVsbCwgImV4cGlyZXMiOiAiLTFzIiwgInBhc3N0aHJ1IjogdHJ1ZSwgInNjcmlwdHMiOiB0cnVlLCAiYWxsb3ciOiBmYWxzZSwgImhlYWRlcnMiOiB7fSwgInJ1bGVzIjoge319fSwgImNvbW1hbmRzIjogeyJzdGFydCI6ICJzY2VudiAvYXBwL3N0cmlwZS1ub3RpZmljYXRpb25zIiwgInN0b3AiOiBudWxsfSwgInVwc3RyZWFtIjogeyJzb2NrZXRfZmFtaWx5IjogInRjcCIsICJwcm90b2NvbCI6ICJodHRwIn0sICJtb3ZlX3RvX3Jvb3QiOiBmYWxzZX0sICJob29rcyI6IHsiYnVpbGQiOiAic2V0IC1lIC14XG5cblxuXG5cblxuXG5cblxuXG5jdXJsIC1zIGh0dHBzOi8vZ2V0LnN5bWZvbnkuY29tL2Nsb3VkL2NvbmZpZ3VyYXRvciB8ICg+JjIgYmFzaClcbmdvIGJ1aWxkXG4iLCAiZGVwbG95IjogbnVsbCwgInBvc3RfZGVwbG95IjogbnVsbH0sICJjcm9ucyI6IHt9LCAid29ya2VycyI6IHt9fQ==\n        W: + base64 --decode\n")); err != nil {
   211  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   212  	} else if n != 712 {
   213  		t.Fatalf("wrong char count returned by gitOutputWriter.Write: got %v, 712 expected", n)
   214  	}
   215  
   216  	if _, err := writer.Write([]byte("        W: + json_pp\n")); err != nil {
   217  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   218  	}
   219  
   220  	if _, err := writer.Write([]byte("        W: + grep '\"type\" : \"php'\n")); err != nil {
   221  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   222  	}
   223  
   224  	if _, err := writer.Write([]byte("        W: + base64 --decode\n")); err != nil {
   225  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   226  	}
   227  
   228  	if _, err := writer.Write([]byte("        W: + exit 0\n")); err != nil {
   229  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   230  	}
   231  
   232  	if _, err := writer.Write([]byte("        W: + go build\n")); err != nil {
   233  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   234  	}
   235  
   236  	if _, err := writer.Write([]byte("        W: go: finding github.com/nlopes/slack v0.4.0\n")); err != nil {
   237  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   238  	}
   239  
   240  	if _, err := writer.Write([]byte("        W: [...]\n")); err != nil {
   241  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   242  	}
   243  
   244  	if _, err := writer.Write([]byte("        W: go: downloading github.com/gorilla/websocket v1.4.0\n        W: go: downloading github.com/pkg/errors v0.8.0\n")); err != nil {
   245  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   246  	}
   247  
   248  	if _, err := writer.Write([]byte("\n      Executing pre-flight checks...\n")); err != nil {
   249  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   250  	}
   251  
   252  	if _, err := writer.Write([]byte("\n      Compressing application.\n")); err != nil {
   253  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   254  	}
   255  
   256  	if _, err := writer.Write([]byte("      Beaming package to its final destination.\n")); err != nil {
   257  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   258  	}
   259  
   260  	if _, err := writer.Write([]byte("\n    Provisioning certificates\n      Environment certificates\n      - certificate d22187d: expiring on 2019-01-28 07:13:00+00:00, covering test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io\n\n\n    Re-deploying environment 4xfrp6lcgobc4-test-deployment-failing-gbppxsi\n")); err != nil {
   261  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   262  	}
   263  
   264  	if _, err := writer.Write([]byte("      Environment configuration\n")); err != nil {
   265  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   266  	}
   267  
   268  	if _, err := writer.Write([]byte("        app (type: golang:1.11, size: S, disk: 1024)\n")); err != nil {
   269  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   270  	}
   271  
   272  	if _, err := writer.Write([]byte("\n")); err != nil {
   273  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   274  	}
   275  
   276  	if _, err := writer.Write([]byte("      Environment routes\n")); err != nil {
   277  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   278  	}
   279  
   280  	if _, err := writer.Write([]byte("        http://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/ redirects to https://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/\n")); err != nil {
   281  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   282  	}
   283  
   284  	if _, err := writer.Write([]byte("        https://test-deployment-failing-gbppxsi-4xfrp6lcgobc4.eu.s5y.io/ is served by application 'app'\n")); err != nil {
   285  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   286  	}
   287  
   288  	if _, err := writer.Write([]byte("\n")); err != nil {
   289  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   290  	}
   291  
   292  	if _, err := writer.Write([]byte("\n")); err != nil {
   293  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   294  	}
   295  
   296  	if _, err := writer.Write([]byte("To git.eu.s5y.io:4xfrp6lcgobc4.git\n   72daff6..2c02b16  HEAD -> test-deployment-failing\n")); err != nil {
   297  		t.Fatalf("gitOutputWriter.Write returned an unexcepted error: %v", err)
   298  	}
   299  
   300  	output := buf.String()
   301  	t.Assert(output, Equals, expectedOutput)
   302  }